码迷,mamicode.com
首页 > 其他好文 > 详细

添砖加瓦:设计模式(工厂方法模式)

时间:2017-10-22 23:26:25      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:接口   out   src   ctf   null   space   int   char   isp   

  1、工厂方法模式中的角色和职责

  抽象工厂角色工厂方法模式的核心,任何工厂类都必须实现这个接口。

  工厂角色具体工厂类是抽象工厂的一个实现,负责实例化产品对象。

  抽象产品角色工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

  具体产品角色工厂方法模式所创建的具体实例对象

  简单工厂模式 + “开闭原则” = 工厂方法模式

  2、工厂方法模式优缺点

  优点

  (1) 不需要记住具体类名,甚至连具体参数都不用记忆。
  (2) 实现了对象创建和使用的分离。
  (3)系统的可扩展性也就变得非常好,无需修改接口和原类。

  缺点

  (1)增加系统中类的个数,复杂度和理解难度增加。
  (2) 增加了系统的抽象性和理解难度。

  3、适用场景

  (1)客户端不知道它所需要的对象的类。
  (2) 抽象工厂类通过其子类来指定创建哪个对象 、

  4、实例

技术分享
 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 //简单工厂模式
 7 /*
 8 *    定义一个工作抽象类,供具体工种实现和工厂使用
 9 */
10 class Work
11 {
12 public:
13     virtual void job() = 0;
14 };
15 /*
16 *    创建一个工厂的抽象类,供具体的工作工厂实现,并返回抽象工作类
17 */
18 class abstractFactory
19 {
20 public:
21     virtual Work *createJob() = 0;
22 };
23 
24 //实例
25 class Salesman :public Work
26 {
27 public:
28     virtual void job()
29     {
30         cout << "I`m a Salesman" << endl;
31     }
32 };
33 
34 //实现抽象工厂,返回抽象工作指针
35 class abstractSalesman : public abstractFactory
36 {
37 public:
38     virtual Work *createJob()
39     {
40         return new Salesman;
41     }
42 };
43 
44 /*
45     此时,若想添加一个医生类,那么只需要实现一个医生工厂和一个医生具体类,并不需要修改已有的代码
46 */
47 class Doctor : public Work
48 {
49     virtual void job()
50     {
51         cout << "I`m a Doctor" << endl;
52     }
53 };
54 class abstractDoctor : public abstractFactory
55 {
56 public:
57     virtual Work *createJob()
58     {
59         return new Doctor;
60     }
61 };
62 
63 int main(int argc, char* argv[])
64 {
65     /*
66         依赖倒转原则, 是针对接?的编程,
67         那么,何为针对接??
68         即只需要 使? 抽象??类的指针,和抽象?果类的指针,
69         通过多态的特性,就可以搞定完成具体类的业务。
70     */
71 
72     abstractFactory *abFactory = NULL;
73     Work *work = NULL;
74 
75     /*
76         使用抽象指针完成售货员业务
77     */
78     abFactory = new abstractSalesman;
79     work = abFactory->createJob();
80     work->job();
81     delete abFactory;
82     delete work;
83 
84     /*
85         使用抽象指针完成医生业务
86     */
87     abFactory = new abstractDoctor;
88     work = abFactory->createJob();
89     work->job();
90     delete abFactory;
91     delete work;
92 
93 
94     getchar();
95     return 0;
96 }
View Code

 

添砖加瓦:设计模式(工厂方法模式)

标签:接口   out   src   ctf   null   space   int   char   isp   

原文地址:http://www.cnblogs.com/lianshuiwuyi/p/7712312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!