【计划模式】装饰模式

打印 上一主题 下一主题

主题 527|帖子 527|积分 1581

1. 欠好的代码(冗杂)

  1. //业务操作
  2. class Stream{
  3. public:
  4.     virtual char Read(int number)=0;
  5.     virtual void Seek(int position)=0;
  6.     virtual void Write(char data)=0;
  7.    
  8.     virtual ~Stream(){}
  9. };
  10. //主体类
  11. class FileStream: public Stream{
  12. public:
  13.     virtual char Read(int number){
  14.         //读文件流
  15.     }
  16.     virtual void Seek(int position){
  17.         //定位文件流
  18.     }
  19.     virtual void Write(char data){
  20.         //写文件流
  21.     }
  22. };
  23. class NetworkStream :public Stream{
  24. public:
  25.     virtual char Read(int number){
  26.         //读网络流
  27.     }
  28.     virtual void Seek(int position){
  29.         //定位网络流
  30.     }
  31.     virtual void Write(char data){
  32.         //写网络流
  33.     }
  34.    
  35. };
  36. class MemoryStream :public Stream{
  37. public:
  38.     virtual char Read(int number){
  39.         //读内存流
  40.     }
  41.     virtual void Seek(int position){
  42.         //定位内存流
  43.     }
  44.     virtual void Write(char data){
  45.         //写内存流
  46.     }
  47.    
  48. };
  49. //扩展操作
  50. class CryptoFileStream :public FileStream{
  51. public:
  52.     virtual char Read(int number){
  53.       
  54.         //额外的加密操作...
  55.         FileStream::Read(number);//读文件流
  56.         
  57.     }
  58.     virtual void Seek(int position){
  59.         //额外的加密操作...
  60.         FileStream::Seek(position);//定位文件流
  61.         //额外的加密操作...
  62.     }
  63.     virtual void Write(byte data){
  64.         //额外的加密操作...
  65.         FileStream::Write(data);//写文件流
  66.         //额外的加密操作...
  67.     }
  68. };
  69. class CryptoNetworkStream : :public NetworkStream{
  70. public:
  71.     virtual char Read(int number){
  72.         
  73.         //额外的加密操作...
  74.         NetworkStream::Read(number);//读网络流
  75.     }
  76.     virtual void Seek(int position){
  77.         //额外的加密操作...
  78.         NetworkStream::Seek(position);//定位网络流
  79.         //额外的加密操作...
  80.     }
  81.     virtual void Write(byte data){
  82.         //额外的加密操作...
  83.         NetworkStream::Write(data);//写网络流
  84.         //额外的加密操作...
  85.     }
  86. };
  87. class CryptoMemoryStream : public MemoryStream{
  88. public:
  89.     virtual char Read(int number){
  90.         
  91.         //额外的加密操作...
  92.         MemoryStream::Read(number);//读内存流
  93.     }
  94.     virtual void Seek(int position){
  95.         //额外的加密操作...
  96.         MemoryStream::Seek(position);//定位内存流
  97.         //额外的加密操作...
  98.     }
  99.     virtual void Write(byte data){
  100.         //额外的加密操作...
  101.         MemoryStream::Write(data);//写内存流
  102.         //额外的加密操作...
  103.     }
  104. };
  105. class BufferedFileStream : public FileStream{
  106.     //...
  107. };
  108. class BufferedNetworkStream : public NetworkStream{
  109.     //...
  110. };
  111. class BufferedMemoryStream : public MemoryStream{
  112.     //...
  113. }
  114. class CryptoBufferedFileStream :public FileStream{
  115. public:
  116.     virtual char Read(int number){
  117.         
  118.         //额外的加密操作...
  119.         //额外的缓冲操作...
  120.         FileStream::Read(number);//读文件流
  121.     }
  122.     virtual void Seek(int position){
  123.         //额外的加密操作...
  124.         //额外的缓冲操作...
  125.         FileStream::Seek(position);//定位文件流
  126.         //额外的加密操作...
  127.         //额外的缓冲操作...
  128.     }
  129.     virtual void Write(byte data){
  130.         //额外的加密操作...
  131.         //额外的缓冲操作...
  132.         FileStream::Write(data);//写文件流
  133.         //额外的加密操作...
  134.         //额外的缓冲操作...
  135.     }
  136. };
  137. void Process(){
  138.         //编译时装配
  139.     CryptoFileStream *fs1 = new CryptoFileStream();
  140.     BufferedFileStream *fs2 = new BufferedFileStream();
  141.     CryptoBufferedFileStream *fs3 =new CryptoBufferedFileStream();
  142. }
复制代码
2. 好的代码

  1. //业务操作
  2. class Stream{
  3. public:
  4.     virtual char Read(int number)=0;
  5.     virtual void Seek(int position)=0;
  6.     virtual void Write(char data)=0;
  7.    
  8.     virtual ~Stream(){}
  9. };
  10. //主体类
  11. class FileStream: public Stream{
  12. public:
  13.     virtual char Read(int number){
  14.         //读文件流
  15.     }
  16.     virtual void Seek(int position){
  17.         //定位文件流
  18.     }
  19.     virtual void Write(char data){
  20.         //写文件流
  21.     }
  22. };
  23. class NetworkStream :public Stream{
  24. public:
  25.     virtual char Read(int number){
  26.         //读网络流
  27.     }
  28.     virtual void Seek(int position){
  29.         //定位网络流
  30.     }
  31.     virtual void Write(char data){
  32.         //写网络流
  33.     }
  34.    
  35. };
  36. class MemoryStream :public Stream{
  37. public:
  38.     virtual char Read(int number){
  39.         //读内存流
  40.     }
  41.     virtual void Seek(int position){
  42.         //定位内存流
  43.     }
  44.     virtual void Write(char data){
  45.         //写内存流
  46.     }
  47.    
  48. };
  49. //扩展操作
  50. class CryptoStream: public Stream {
  51.    
  52.     Stream* stream;//...
  53. public:
  54.     CryptoStream(Stream* stm):stream(stm){
  55.    
  56.     }
  57.    
  58.    
  59.     virtual char Read(int number){
  60.       
  61.         //额外的加密操作...
  62.         stream->Read(number);//读文件流
  63.     }
  64.     virtual void Seek(int position){
  65.         //额外的加密操作...
  66.         stream->Seek(position);//定位文件流
  67.         //额外的加密操作...
  68.     }
  69.     virtual void Write(byte data){
  70.         //额外的加密操作...
  71.         stream->Write(data);//写文件流
  72.         //额外的加密操作...
  73.     }
  74. };
  75. class BufferedStream : public Stream{
  76.    
  77.     Stream* stream;//...
  78.    
  79. public:
  80.     BufferedStream(Stream* stm):stream(stm){
  81.         
  82.     }
  83.     //...
  84. };
  85. void Process(){
  86.     //运行时装配
  87.     FileStream* s1=new FileStream();
  88.        
  89.     CryptoStream* s2=new CryptoStream(s1);
  90.    
  91.     BufferedStream* s3=new BufferedStream(s1);
  92.    
  93.     BufferedStream* s4=new BufferedStream(s2);
  94. }
复制代码
3. 继续改进

  1. //业务操作
  2. class Stream{
  3. public:
  4.     virtual char Read(int number)=0;
  5.     virtual void Seek(int position)=0;
  6.     virtual void Write(char data)=0;
  7.    
  8.     virtual ~Stream(){}
  9. };
  10. //主体类
  11. class FileStream: public Stream{
  12. public:
  13.     virtual char Read(int number){
  14.         //读文件流
  15.     }
  16.     virtual void Seek(int position){
  17.         //定位文件流
  18.     }
  19.     virtual void Write(char data){
  20.         //写文件流
  21.     }
  22. };
  23. class NetworkStream :public Stream{
  24. public:
  25.     virtual char Read(int number){
  26.         //读网络流
  27.     }
  28.     virtual void Seek(int position){
  29.         //定位网络流
  30.     }
  31.     virtual void Write(char data){
  32.         //写网络流
  33.     }
  34.    
  35. };
  36. class MemoryStream :public Stream{
  37. public:
  38.     virtual char Read(int number){
  39.         //读内存流
  40.     }
  41.     virtual void Seek(int position){
  42.         //定位内存流
  43.     }
  44.     virtual void Write(char data){
  45.         //写内存流
  46.     }
  47.    
  48. };
  49. //扩展操作
  50. DecoratorStream: public Stream{
  51. protected:
  52.     Stream* stream;//...
  53.    
  54.     DecoratorStream(Stream * stm):stream(stm){
  55.    
  56.     }
  57.    
  58. };
  59. class CryptoStream: public DecoratorStream {
  60. public:
  61.     CryptoStream(Stream* stm):DecoratorStream(stm){
  62.    
  63.     }
  64.    
  65.    
  66.     virtual char Read(int number){
  67.       
  68.         //额外的加密操作...
  69.         stream->Read(number);//读文件流
  70.     }
  71.     virtual void Seek(int position){
  72.         //额外的加密操作...
  73.         stream->Seek(position);//定位文件流
  74.         //额外的加密操作...
  75.     }
  76.     virtual void Write(byte data){
  77.         //额外的加密操作...
  78.         stream->Write(data);//写文件流
  79.         //额外的加密操作...
  80.     }
  81. };
  82. class BufferedStream : public DecoratorStream{
  83.    
  84.     Stream* stream;//...
  85.    
  86. public:
  87.     BufferedStream(Stream* stm):DecoratorStream(stm){
  88.         
  89.     }
  90.     //...
  91. };
  92. void Process(){
  93.     //运行时装配
  94.     FileStream* s1=new FileStream();
  95.    
  96.     CryptoStream* s2=new CryptoStream(s1);
  97.    
  98.     BufferedStream* s3=new BufferedStream(s1);
  99.    
  100.     BufferedStream* s4=new BufferedStream(s2);
  101. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表