WEB开发网
开发学院软件开发VC 运用设计模式设计MIME编码类 -- 兼谈Template M... 阅读

运用设计模式设计MIME编码类 -- 兼谈Template Method和Strategy模式的区别

 2007-03-16 21:56:45 来源:WEB开发网   
核心提示: bool UMime::Encode(CString & outTargetStr,const unsigned char * const inSourceBuf,int inSourceBufLen);bool UMime::Decode(CString & outTargetStr,c
bool UMime::Encode(CString & outTargetStr,
      const unsigned char * const inSourceBuf,
      int inSourceBufLen);
bool UMime::Decode(CString & outTargetStr,
      const unsigned char * const inSourceBuf,
      int inSourceBufLen);
bool UMime::Encode(unsigned char * outTargetBuf,
      int & outTargetBufLen,
      CString & inSourceStr);
bool UMime::Decode(unsigned char * outTargetBuf,
      int & outTargetBufLen,
      CString & inSourceStr);
以免用户类型转换之苦。

啊哈,这么8个极为相似的接口函数搅在一起,好像一团麻呀。可重用性似乎满足了,但易使用性和易扩展性完全谈不上。

2、设计成使用Template Method模式的String Class

第2种方案浮现在脑海中:

· 既然整个算法就是将一个Buffer转换成另一个Buffer,写成一个String Class是非常自然的设计

· 用Class的成员变量保存Target Buffer及其长度(因为Buffer中可能有’’),另外提供GetBuf()和GetBufLen()作为查询Target Buffer的接口

· 直接从构造函数传递Source Buffer的信息

该类大概象这样:

class CMimeString
{
public:
  enum PROCESSTYPE
  {
    ENCODING = 0,
    DECODING = 1
  };
  CMimeString(PROCESSTYPE inType, const unsigned char * const inBuf, int inBufLen);
  CMimeString(PROCESSTYPE inType, CString & inStr);
  virtual ~ CMimeString();
  unsigned char * GetBuf( void );
  int GetBufLen( void );
  operator LPCTSTR() const;
};
哈,似乎很美妙。

上一页  1 2 3 4 5 6 7  下一页

Tags:运用 设计模式 设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接