创建型模式抽象了实例化过程,他们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,一个对象创建模式将实例化委托给另一个对象。

1. Factory Method 
作用: 
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到子类。 
UML结构图: 

抽象基类: 
1)Product 创建出来的对象的抽象基类 
2)Factory创建对象的工厂方法的抽象基类

接口函数: 
1)Creator::FactoryMethod 纯虚函数,由派生类实现,创建出对应的Product

解析: 
Factory子类和Product子类一一对应,在Factory类和Product类相互协作的时候是由相应的Factory派生类来生成Product的派生类,也即如果要新增一种Product,那么也要对应的新增一个Factory,创建的过程委托给了这个Factory。

2. Abstract Factory 
作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

UML结构图: 

抽象基类: 
1)ProductA,ProductB 分别代表不同类型的产品,而他们的派生类则是这种产品的一个实现 
2)AbstractFactory 生产这一系列产品的一个抽象工厂,它的派生类是不同的实现

接口函数: 
1)AbstractFactory::CreateProductA 和 AbstractFactory::CreateProductB分别是生产不同产品的不同的实现, 由各个派生出来的抽象工厂实现之.

解析: 
抽象工厂创建的是一系列相关的对象,其中创建的实现其实采用的就是Factory模式的方法,对于某个实现的有一个派生出来的工厂,另一个实现有另一个派生出来的工厂等等。

3. Builder模式 
作用: 
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

UML结构图: 

适用情况: 
1)当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时 
2)当构造过程必须允许被构造的对象有不同的表示时

抽象基类: 
Builder 是全部创建对象过程的抽象,提供构建不同组成部分的接口函数

接口: 
Builder::BuildPartA(), Builder::BuildPartB() 是对一个对象不同部分的构建函数接口,Builder的派生类来具体实现。这些BuildPart在Director::Construct()中被调用。

解析: 
Builder模式基于这种情况,一个对象可能有多个不同的组成部分,这几个部分的不同的创建对象会有不同的表示,但是各个部分之间装配的方式是一致的。Director::Construct函数中固定了各个组成部分的装配方式,而具体装配是怎样的组成部分由Builder的派生类实现。

class Director
{
public:Director(Builder* pBuilder):m_pBuilder(pBuilder){}~Director(){delete m_pBuilder;m_pBuilder = NULL;}// Construct函数表示一个对象的整个构建过程, 不同的部分之间的装配方式都是一致的,首先构建PartA其次是PartB,只是根据不同的构建者会有不同的表示void Construct(){m_pBuilder->BuilderPartA();m_pBuilder->BuilderPartB();}
private:Builder* m_pBuilder;
};

4. Prototype模式 
作用: 
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

UML结构图: 

抽象基类: 
Portotype 虚拟基类,所有原型的基类,提供Clone接口函数。

接口函数: 
Prototype::Clone函数,根据不同的派生类来实例化创建对象。

解析: 
Prototype模式其实就是“虚拟构造函数”的一个实现,c++的实现机制中并没有支持这个特性,但是通过不同派生类实现的 Clone 接口函数可以完成与“虚拟构造函数”同样的效果。

实现:

//虚拟基类,所有原型的基类,提供 Clone 接口函数
class Prototype
{
public:Prototype(){}virtual ~Prototype(){}virtual Prototype* Clone()=0;
};
//派生自Prototype,实现Clone方法
class ConcretePrototype1:public Prototype
{
public:ConcretePrototype1(){ cout<<"ConcretePrototype1"<<endl;}ConcretePrototype1(const ConcretePrototype1& p){ cout<<"ConcretePrototype1 copy..."<<endl; }virtual ~ConcretePrototype1(){}virtual Prototype* Clone(){ return new ConcretePrototype1(*this); }
};
//派生自Prototype,实现Clone方法
class ConcretePrototype2:public Prototype
{
public:ConcretePrototype2(){ cout<<"ConcretePrototype2"<<endl;}ConcretePrototype2(const ConcretePrototype2& p){ cout<<"ConcretePrototype2 copy..."<<endl; }virtual ~ConcretePrototype2(){}virtual Prototype* Clone(){ return new ConcretePrototype2(*this); }
};int main()
{Prototype* p1 = new ConcretePrototype1();Prototype* p2 = p1->Clone();Prototype* p3 = new ConcretePrototype2();Prototype* p4 = p3->Clone();delete p1;delete p2;delete p3;delete p4;return 0;
}

5. Singleton模式 
作用: 
保证一个类仅有一个实例,并提供一个访问它的全局访问点

UML结构图: 

实现: 
一般的,如果一个项目中需要使用到 Singleton 模式比较多的话,那么一般会实现一个 Singleton 的模板类,模板类的模板参数是需要采用 Singleton 模式的类,比如这样实现:

Template<typename T>
class Singleton
{
// . . .类的声明
};
//需要采用 singleton 模式的类
classTest:public Singleton<Test>
{
// …类的声明
};

设计模式——创建型模式相关推荐

  1. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  2. 设计模式-创建型模式-建造者模式

    设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...

  3. 设计模式-创建型模式-模板方法

    设计模式-创建型模式-模板方法 定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义一个算法的步骤. protected 对于本包及其子类可见. 类图 代码 代 ...

  4. 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...

  5. 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)

    七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...

  6. 设计模式-创建型模式-抽象工厂模式

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

  7. 设计模式-创建型模式-简单工厂模式

    工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...

  8. 设计模式-创建型模式-工厂方法模式

    工程源码:c++设计模式-创建型模式-工厂方法模式https://download.csdn.net/download/qq_40788199/85541617 码云:https://gitee.co ...

  9. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

  10. Java创新型模式_java设计模式--创建型模式(一)

    2016-04-24 10:10:34 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 注意:工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂 ...

最新文章

  1. Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
  2. Java中的基本类型变量储存方式
  3. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...
  4. 用python画皮卡丘代码-实现童年宝可梦,教你用Python画一只属于自己的皮卡丘
  5. pycharm中from xx import xx报错:Unresolved reference
  6. 前端学习(1395):多人管理项目15建立请求
  7. Oracle创建表_01
  8. 蛮力法在排序算法中的应用(JAVA)--选择排序、冒泡排序
  9. AngularJS-模型和控制器
  10. new 一个结构体数组_C语言结构体到底占多少内存?简单!一文助你解决结构体内存问题...
  11. python对象模型映射_【500 Lines or Less】-【翻译练习】-【chapter 14】-【简单对象模型】-【第一部分】...
  12. 关于group by 两个或以上条件的分析
  13. Qt实现一个抽奖游戏
  14. Hbase的MapReduce(Hbase权威指南)+ BulkLoad导入HBase
  15. 【摘录】模拟物流快递系统程序设计
  16. esp8266--04wifi开关
  17. 基于OpenGL的雷达P显的系统设计与仿真 PPI_雷达仿真_雷达模拟器_雷达目标_雷达ppi_PPI显示器_源码
  18. Linux mint 双硬盘,记一次装机——笔记本UEFI双硬盘(SSD+机械)双系统(Win10+Linux Mint)...
  19. 基于 STM32对音频数据的 Flash 读取与 DAC 播放
  20. Ubuntu出现 recovering journal ; /dev/sda1: clean, ***/*** files, ***/*** blocks 等信息无法开机的问题

热门文章

  1. javascript 面试题
  2. Oracle笔记 七、PL/SQL 异常处理
  3. 谈谈对分布式事务的一点理解和解决方案
  4. mysql binlog的查询
  5. Siri ShortCut 调研(含Demo)
  6. Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
  7. Radware安全研究团队发现了可摧毁不安全IoT设备的“Brickerbot”恶意软件
  8. 刘启成_编写并使用shell脚本
  9. 什么?程序员还要了解经济学?!
  10. linux计时函数的使用