1 创建型模式-----简单工厂模式

1.1 模式定义

简单工厂模式:将创建不同对象的代码封装到具体产品类中;

将创建这些具体产品类的公共代码封装到到抽象产品类中;

定义一个工厂类,该类的静态方法可以根据不同参数创建不同的具体产品实例。

模式要点:需要什么类型的产品,只需传入一个正确的参数,就可以获得一个对应的实例。

1.2 模式结构图

1.3 模式角色

抽象产品Product: 具体产品类的父类,封装了各种具体产品的公共方法。

具体产品ConcreteProduct: 需要实例化的类。

工厂类Factory: 简单工厂模式的核心,负责创建所有具体产品的实例。

1.4 代码实现

 1 bt_简单工厂模式.h
 2 #ifndef SFP_H
 3 #define SFP_H
 4 #include <string.h>
 5 #include <iostream>
 6
 7 using namespace std;
 8
 9 /* 定义抽象产品类 */
10 class Product
11 {
12 public:
13     virtual ~Product(){}
14     void sharedMethod()
15     {
16         cout << "执行具体产品类的公共代码" << endl;
17     }
18 };
19
20 /* 定义具体产品类 */
21 class ConcreteProductA : public Product
22 {
23 public:
24     ConcreteProductA()
25     {
26         this->sharedMethod();
27         cout << "创建具体产品A" << endl;
28     }
29     ~ConcreteProductA()
30     {
31         cout << "销毁具体产品A" << endl;
32     }
33
34 };
35 class ConcreteProductB : public Product
36 {
37 public:
38     ConcreteProductB()
39     {
40         this->sharedMethod();
41         cout << "创建具体产品B" << endl;
42     }
43     ~ConcreteProductB()
44     {
45         cout << "销毁具体产品B" << endl;
46     }
47 };
48
49 /* 定义工厂类 */
50 class Factory
51 {
52 public:
53     static Product* createProduct(const char* args)
54     {
55         if(strcmp(args, "A") == 0)
56         {
57             return new ConcreteProductA();
58         }
59         if(strcmp(args, "B") == 0)
60         {
61             return new ConcreteProductB();
62         }
63         else
64         {
65             cout << "unknown product type" << endl;
66             return NULL;
67         }
68     }
69 };
70 #endif // SFP_H
71
72
73
74 bt_简单工厂模式.cpp
75 #include "bt_简单工厂模式.h"
76 #include <iostream>
77
78 using namespace std;
79
80 int main()
81 {
82     cout << "*****简单工厂模式测试用例*****" << endl;
83     Product* product = NULL;
84     product = Factory::createProduct("A");
85
86     delete product;
87
88     return 0;
89 }

1.5 简单工厂模式的简化

在某些情况下,可以将抽象产品类和工厂类合并,将静态工厂方法放在抽象产品类中,如下图所示:

1.6 模式总结

简单工厂模式提供了用于创建对象的工厂类,将对象的创建和使用分量开来,其特点如下:

优点:

分离对象的创建和使用;用户只需通过具体产品对应的参数即可创建实例对象。

缺点:

工厂类职责过重;系统扩展困难,增加新产品必须修改工厂逻辑。

适用场景:

具体产品类比较少且稳定的情况。

                                                      

                                                       参考自刘伟博客: http://blog.csdn.net/lovelion

时间: 2024-12-24 05:56:13

1 创建型模式-----简单工厂模式的相关文章

&quot;围观&quot;设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式的核心思想在我认为是将类创建的权利授予给工厂类,其他的类不允许创建,授予了权限的类创建好之后,需要某些的对象的时候,可以去工厂当中去取.也就是像一个工厂一样,用的人不需要关心对象怎么来的,你只需要关心怎么用就好了.工厂模式细分为三种,简单工厂.工厂方法.抽象工厂三种模式.这三种模式比较相似,往往会引发混淆,本文主要结合实际的例子去进行区分.理清三者之间的关系与适用范围. 概述 简单工厂 对于简单工厂,我个人的理解是,直接实现一个方法,要生产什么由这个方法以及传入的参数来决定. 工厂方法

PYTHON设计模式,创建型之简单工厂模式

这个系统,感觉思路清爽,,相信多练练,多思考,就会熟悉的.. http://www.jianshu.com/p/2450b785c329 #!/usr/bin/evn python #coding:utf8 class Pizza(object): def prepare(self, type): print 'prepare {type} pizza'.format(type=type) def bake(self, type): print 'bake {type} pizza'.forma

创建型模式 简单工厂模式

创建型模式 简单工厂模式 /** * 创建型模式 简单工厂模式 * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. * * 1.工厂(Creator)角色 * 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. * 2.抽象(Product)角色 * 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口. * 3.具体产品(Concrete P

【一起学设计模式】状态模式+装饰器模式+简单工厂模式实战:(一)提交个订单我到底经历了什么鬼?

前言 之前在我的博客(一枝花算不算浪漫)中已经更新过两篇设计模式相关的内容 [一起学设计模式]策略模式实战一:基于消息发送的策略模式实战 [一起学习设计模式]策略模式实战二:配合注解 干掉业务代码中冗余的if else... [一起学设计模式]访问者模式实战:权限管理树删节点操作 [一起学设计模式]命令模式+模板方法+工厂方法实战: 如何优雅的更新商品库存... 上面内容都是基于真实业务场景精简后的设计(工作中真实场景使用到的). 之前为了学习设计模式,看过网上很多相关博客讲解,大都是画下UML

工厂模式——简单工厂模式

工厂模式分三类:简单工厂模式.工厂方法模式.抽象工厂模式. 首先介绍比较简单一种工厂模式——简单工厂模式. 我们以计算器作为一个例子来说明工厂模式到底是什么.作为一个几年前大一从C语言起步的初级程序员,到现在写代码的思维还是停留在结构化编程,虽然Java学了有几年了,总是说面向对象面向对象.但是让实现一个计算器的程序,估计大部分人都会以C语言式的结构化编程来写,几个if语句或者一个switch来搞定.我也同样不例外,为了提高自己的编程水平,所以一点点开始学设计模式.其实在很多开源代码里也有很多经

java语言实现创建型模式——简单工厂模式

一.描述 简单工厂模式又名静态工厂方法模式,是所有工厂模式中最简单的一个,它定义一个具体的工厂类来负责创建所有类的对象并初始化创建的对象,它主要由3部分组成:工厂类.抽象类.实现抽象类的具体类,然后通过客户端调用工厂类创建相应的对象. 注意:简单工厂模式不属于GoF总结的23种设计模式,它是相当于初学java的HelloWorld案例,帮助初学者了解设计模式,增长信心的一个设计模式. 二.简单工厂模式的优缺点 优点:相对于直接在客户端创建对象并初始化对象的值来说,简单工厂模式将创建对象和初始化任

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实

策略模式+简单工厂模式+单例模式:简单推送服务

一.功能: 实现  获取数据  —>根据用户订阅清单进行推送 —> 这里的推送方式:QQ.Email.App.插件等等 用户可多选推送方式. 二.实现 1.推送方式—枚举(位运算): [Flags] public enum PushType { QQ = 0, Email = 2 } 2.策略模式:抽象推送策略 public interface IPush { bool Push(object data); } 3.QQ推送+Email推送 QQ推送:单例模式—静态创建QQ推送服务,线程安全.

Java模式—简单工厂模式

简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式. 目的:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑.在java中它往往由一个具体类实现. 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口.在java中由接口或者抽象类来实现. 3) 具体产品角色:工厂类所创建的对象就是此角色的实例.在java中由一个具体类实现