简单工厂模式

简单工厂模式

简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色:

工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 
抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口抽象类实现。 
具体产品角色:工厂方法模式所创建的任何对 象都是这个角色的实例,由具体类实现。 


简单工厂模式优缺点: 
模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。

 1 #define win 0
 2 #define mac 1
 3 #include <iostream>
 4 using namespace std;
 5 
 6 class button     //抽象基类   类似于接口 
 7 {
 8 public:
 9     button(){}
10     virtual void createbutton()=0;
11 };
12 
13 class macbutton : public button
14 {
15 public:
16     macbutton(){}
17     virtual void createbutton(){cout<<"macbutton"<<endl;}
18 };
19 class winbutton : public button
20 {
21 public:
22  winbutton(){}
23  virtual void createbutton(){cout<<"winbutton"<<endl;}
24 };
25 
26 class simplefactory
27 {
28 public:
29     simplefactory(){}
30     button *createproduct(int ID);    //返回值是抽象基类的指针 
31     button *createmacproduct();
32     button *createwinproduct();
33 };
34 
35 button *simplefactory::createproduct(int ID)
36 {
37     if (ID==win)
38         return new winbutton;       //直接返回new<T> 
39     if (ID==mac)
40         return new macbutton;
41 }
42 
43 button *simplefactory::createwinproduct()
44 {
45     return new winbutton;
46 }
47 
48 button *simplefactory::createmacproduct()
49 {
50     return new macbutton;
51 }
52 
53 int main()
54 {
55     simplefactory fc;    //声明或创建一个工厂 
56     button *bt=fc.createproduct(win);   //用工厂生产 生产是个指针 
57     bt->createbutton();
58     delete bt;
59     return 0;
60 }

代码改自http://www.cnblogs.com/tiandsp/archive/2012/06/24/2560106.html

要点 http://www.cnblogs.com/sadys/archive/2006/05/10/395869.html

原文地址:https://www.cnblogs.com/whzlw/p/3778625.html