c++设计模式之工厂方法

视频地址:

https://www.ixigua.com/6804249883344634380?id=6803643086279803399

文档整理路径:

http://t.csdn.cn/Kc93G

工厂方法类图:

 

 代码样例:

  1 #include<iostream>
  2 
  3 //抽象类
  4 class ISplitter {
  5 public:
  6     virtual void split() = 0;
  7     virtual ~ISplitter() {}
  8 };
  9 
 10 //工厂基类
 11 class SplitterFactory {
 12 public:
 13     virtual ISplitter* CreateSplitter() = 0;
 14     virtual ~SplitterFactory() {}
 15 };
 16 
 17 //具体类
 18 class BinarySplitter : public ISplitter {
 19 public:
 20     virtual void split() 
 21     {
 22         std::cout << "BinarySplitter" << std::endl;
 23     }
 24 };
 25 
 26 class TxtSplitter : public ISplitter {
 27 public:
 28     virtual void split() 
 29     {
 30         std::cout << "TxtSplitter" << std::endl;
 31     }
 32 };
 33 
 34 class PictureSplitter : public ISplitter {
 35 public:
 36     virtual void split() 
 37     {
 38         std::cout << "PictureSplitter" << std::endl;
 39     }
 40 };
 41 
 42 class VideoSplitter : public ISplitter {
 43 public:
 44     virtual void split() 
 45     {
 46         std::cout << "VideoSplitter" << std::endl;
 47     }
 48 };
 49 
 50 //具体工厂
 51 class BinarySplitterFactory : public SplitterFactory {
 52 public:
 53     virtual ISplitter* CreateSplitter() override {
 54         return new BinarySplitter;
 55     }
 56 };
 57 
 58 class TxtSplitterFactory : public SplitterFactory {
 59 public:
 60     virtual ISplitter* CreateSplitter() override {
 61         return new TxtSplitter;
 62     }
 63 };
 64 
 65 class PictureSplitterFactory : public SplitterFactory {
 66 public:
 67     virtual ISplitter* CreateSplitter() override {
 68         return new PictureSplitter;
 69     }
 70 };
 71 
 72 class VideoSplitterFactory : public SplitterFactory {
 73 public:
 74     virtual ISplitter* CreateSplitter() override {
 75         return new VideoSplitter;
 76     }
 77 };
 78 
 79 
 80 class Form
 81 {
 82     //...
 83 };
 84 
 85 class MainForm :public Form
 86 {
 87 public:
 88     MainForm(SplitterFactory* factory)
 89     {
 90         this->factory = factory;
 91     }
 92     void Button_Click()
 93     {
 94         ISplitter* splitter = factory->CreateSplitter();
 95         splitter->split();
 96     }
 97     //...
 98 private:
 99     //...
100     SplitterFactory* factory;
101 };
102 
103 int main()
104 {
105     SplitterFactory* Binary = new BinarySplitterFactory();
106     MainForm* formBinary = new MainForm(Binary);
107     formBinary->Button_Click();
108 
109     SplitterFactory* Txt = new TxtSplitterFactory();
110     MainForm* formTxt = new MainForm(Txt);
111     formTxt->Button_Click();
112 
113     SplitterFactory* Picture = new PictureSplitterFactory();
114     MainForm* formPicture = new MainForm(Picture);
115     formPicture->Button_Click();
116 
117     SplitterFactory* Video = new VideoSplitterFactory();
118     MainForm* formVideo = new MainForm(Video);
119     formVideo->Button_Click();
120 
121     return 0;
122 }

 

posted @ 2022-05-19 00:23  跳动的休止符  阅读(34)  评论(0)    收藏  举报