设计模式:工厂方法模式

抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合。

设计原则:遵循单一职责、依赖倒置、开闭原则
常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类
变化点:工厂与产品的种类
选择关键点:产品族是否需要一起提供,且是否有一致的接口

假如我们需要各种水果(如apple),那么做法是:

1.首先需要一个苹果工厂类,从抽象工厂类继承;

2.来一个苹果,苹果工厂只能生产苹果(苹果工厂的生产器只能生产苹果)。

抽象工厂模式结构图:

实现代码:

 1 #include<iostream>
 2 //工厂方法模式
 3 using namespace std;
 4 class Fruit {
 5 public:
 6     virtual void getName() = 0;
 7 };
 8 
 9 class Apple :public Fruit {
10     virtual void getName(){
11         cout << "I'am apple." << endl;
12     }
13 };
14 
15 class Banana :public Fruit {
16     virtual void getName() {
17         cout << "Banana." << endl;
18     }
19 };
20 
21 class AbstractFactory {
22 public:
23     virtual Fruit* CreateFruit() = 0;
24 };
25 
26 class AppleFactory :public AbstractFactory {
27 public:
28     virtual Fruit* CreateFruit() {
29         return new Apple;
30     }
31 };
32 
33 class BananaFactory :public AbstractFactory {
34 public:
35     virtual Fruit* CreateFruit() {
36         return new Banana;
37     }
38 };
39 
40 int main(void)
41 {    
42     AbstractFactory* af = new AppleFactory;
43     Fruit * apple = af->CreateFruit();
44     apple->getName();
45     delete af;
46     delete apple;
47 
48     AbstractFactory* bf = new BananaFactory;
49     Fruit * banana = bf->CreateFruit();
50     banana->getName();
51     delete bf;
52     delete banana;
53 
54     return 0;
55 }

 测试结果:

posted @ 2017-04-23 11:44  弗莱曼飞侠  阅读(168)  评论(0编辑  收藏  举报