c++设计模式之工厂方法
视频地址:
https://www.ixigua.com/6804249883344634380?id=6803643086279803399
文档整理路径:
工厂方法类图:

代码样例:
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 }
浙公网安备 33010602011771号