├── DecoratorPattern.cpp ├── ObserverPattern.cpp ├── SingletonPattern.cpp ├── StrategyPattern.cpp ├── README.md ├── SimpleFactoryPattern.cpp ├── AbstractFactoryPattern.cpp └── FactoryPattern.cpp /DecoratorPattern.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaocoder/DesignPattern/HEAD/DecoratorPattern.cpp -------------------------------------------------------------------------------- /ObserverPattern.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaocoder/DesignPattern/HEAD/ObserverPattern.cpp -------------------------------------------------------------------------------- /SingletonPattern.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaocoder/DesignPattern/HEAD/SingletonPattern.cpp -------------------------------------------------------------------------------- /StrategyPattern.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaocoder/DesignPattern/HEAD/StrategyPattern.cpp -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | DesignPattern 2 | ============= 3 | 4 | 以C++代码的方式写出常用设计模式实现示例,便于理解。 5 | 6 | * 策略模式(Strategy) 7 | 8 | * 观察者模式(Observer) 9 | 10 | * 装饰者模式(Decorator) 11 | 12 | * 简单工厂模式(SimpleFactory) 13 | 14 | * 工厂模式(Factory) 15 | 16 | * 抽象工厂模式(AbstractFactory) 17 | 18 | * 单例模式(Singleton) 19 | -------------------------------------------------------------------------------- /SimpleFactoryPattern.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 简单工厂模式 3 | */ 4 | #include 5 | #include 6 | using namespace std; 7 | 8 | class Pizza 9 | { 10 | public: 11 | virtual void Prapare() = 0; 12 | virtual void Bake() = 0; 13 | }; 14 | 15 | class CheesePizza:public Pizza 16 | { 17 | public: 18 | 19 | void Prapare() 20 | { 21 | cout << "CheesePizza Prapare.\n"; 22 | } 23 | 24 | void Bake() 25 | { 26 | cout << "CheesePizza Bake.\n"; 27 | } 28 | }; 29 | 30 | class VeggiePizza:public Pizza 31 | { 32 | public: 33 | 34 | void Prapare() 35 | { 36 | cout << "VeggiePizza Prapare.\n"; 37 | } 38 | 39 | void Bake() 40 | { 41 | cout << "VeggiePizza Bake.\n"; 42 | } 43 | }; 44 | 45 | 46 | class SimplePizzaFactory 47 | { 48 | public: 49 | 50 | static Pizza* CreatePizza(string type) 51 | { 52 | if (0 == type.compare("cheese")) 53 | { 54 | pizza_ = new CheesePizza; 55 | } 56 | else if (0 == type.compare("veggie")) 57 | { 58 | pizza_ = new VeggiePizza; 59 | } 60 | 61 | return pizza_; 62 | } 63 | 64 | private: 65 | static Pizza* pizza_; 66 | }; 67 | 68 | Pizza* SimplePizzaFactory::pizza_ = NULL; 69 | 70 | int main() 71 | { 72 | SimplePizzaFactory::CreatePizza("cheese")->Prapare(); 73 | SimplePizzaFactory::CreatePizza("veggie")->Prapare(); 74 | system("pause"); 75 | return 0; 76 | } 77 | 78 | -------------------------------------------------------------------------------- /AbstractFactoryPattern.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 抽象工厂模式:生产济南,北京食物的工厂 3 | */ 4 | #include 5 | #include 6 | using namespace std; 7 | 8 | class Pizza 9 | { 10 | public: 11 | virtual void Production() = 0; 12 | }; 13 | 14 | class BeijingCheesePizza:public Pizza 15 | { 16 | public: 17 | 18 | void Production() 19 | { 20 | cout << "Beijing CheesePizza production.\n"; 21 | } 22 | 23 | }; 24 | 25 | class JinanCheesePizza:public Pizza 26 | { 27 | public: 28 | 29 | void Production() 30 | { 31 | cout << "Jinan CheesePizza production.\n"; 32 | } 33 | 34 | }; 35 | 36 | class Cake 37 | { 38 | public: 39 | virtual void Production() = 0; 40 | }; 41 | 42 | class BeijingCheeseCake:public Cake 43 | { 44 | public: 45 | 46 | void Production() 47 | { 48 | cout << "Beijing Cake production.\n"; 49 | } 50 | 51 | }; 52 | 53 | class JinanCheeseCake:public Cake 54 | { 55 | public: 56 | 57 | void Production() 58 | { 59 | cout << "Jinan Cake production.\n"; 60 | } 61 | 62 | }; 63 | 64 | class Factory 65 | { 66 | public: 67 | virtual Pizza* CreatePizza() = 0; 68 | virtual Cake* CreateCake() = 0; 69 | 70 | }; 71 | 72 | class BeijingFactory:public Factory 73 | { 74 | public: 75 | Pizza* CreatePizza() 76 | { 77 | return new BeijingCheesePizza; 78 | } 79 | 80 | Cake* CreateCake() 81 | { 82 | return new BeijingCheeseCake; 83 | } 84 | }; 85 | 86 | class JinanFactory:public Factory 87 | { 88 | public: 89 | Pizza* CreatePizza() 90 | { 91 | return new JinanCheesePizza; 92 | } 93 | 94 | Cake* CreateCake() 95 | { 96 | return new JinanCheeseCake; 97 | } 98 | }; 99 | 100 | int main() 101 | { 102 | BeijingFactory pBf; 103 | pBf.CreatePizza()->Production(); 104 | pBf.CreateCake()->Production(); 105 | 106 | JinanFactory pJf; 107 | pJf.CreatePizza()->Production(); 108 | pJf.CreateCake()->Production(); 109 | 110 | system("pause"); 111 | return 0; 112 | } 113 | 114 | -------------------------------------------------------------------------------- /FactoryPattern.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 工厂模式 3 | */ 4 | #include 5 | #include 6 | using namespace std; 7 | 8 | class Pizza 9 | { 10 | public: 11 | virtual void Production() = 0; 12 | }; 13 | 14 | class BeijingCheesePizza:public Pizza 15 | { 16 | public: 17 | 18 | void Production() 19 | { 20 | cout << "Beijing CheesePizza production.\n"; 21 | } 22 | 23 | }; 24 | 25 | class BeijingVeggiePizza:public Pizza 26 | { 27 | public: 28 | 29 | void Production() 30 | { 31 | cout << "Beijing VeggiePizza Prapare.\n"; 32 | } 33 | }; 34 | 35 | class JinanCheesePizza:public Pizza 36 | { 37 | public: 38 | 39 | void Production() 40 | { 41 | cout << "Jinan CheesePizza production.\n"; 42 | } 43 | 44 | }; 45 | 46 | class JinanVeggiePizza:public Pizza 47 | { 48 | public: 49 | 50 | void Production() 51 | { 52 | cout << "Jinan VeggiePizza Prapare.\n"; 53 | } 54 | }; 55 | 56 | class PizzaFactory 57 | { 58 | public: 59 | virtual Pizza* CreatePizza(string type) = 0; 60 | 61 | }; 62 | 63 | class BeijingPizzaFactory:public PizzaFactory 64 | { 65 | public: 66 | Pizza* CreatePizza(string type) 67 | { 68 | if (0 == type.compare("cheese")) 69 | { 70 | pizza_ = new BeijingCheesePizza; 71 | } 72 | else if (0 == type.compare("veggie")) 73 | { 74 | pizza_ = new BeijingVeggiePizza; 75 | } 76 | return pizza_; 77 | } 78 | 79 | private: 80 | 81 | Pizza* pizza_; 82 | }; 83 | 84 | class JinanPizzaFactory:public PizzaFactory 85 | { 86 | public: 87 | Pizza* CreatePizza(string type) 88 | { 89 | if (0 == type.compare("cheese")) 90 | { 91 | pizza_ = new JinanCheesePizza; 92 | } 93 | else if (0 == type.compare("veggie")) 94 | { 95 | pizza_ = new JinanVeggiePizza; 96 | } 97 | return pizza_; 98 | } 99 | 100 | private: 101 | 102 | Pizza* pizza_; 103 | }; 104 | 105 | int main() 106 | { 107 | PizzaFactory *beijing = new BeijingPizzaFactory; 108 | beijing->CreatePizza("veggie")->Production(); 109 | 110 | PizzaFactory* jinan = new JinanPizzaFactory; 111 | jinan->CreatePizza("cheese")->Production(); 112 | system("pause"); 113 | return 0; 114 | } 115 | 116 | --------------------------------------------------------------------------------