设计模式之创建型模式

    创建型模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户端可以直接得到对象,而不用去关心如何创建对象。

有五种创建型模式:

  •   单例模式(Singleton): 用于得到某类型的唯一对象;
  •   工厂方法模式(FactoryMethod) : 用于创建复杂对象;
  •   抽象工厂模式(AbstractFactory) : 用于创建一组相关或相互依赖的复杂对象;
  •   建造者模式(Builder): 用于创建模块化的更加复杂的对象;
  •   原型模式(ProtoType): 用于得到一个对象的拷贝;


1. 单例模式(Singleton)


意图

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。

优点

  •   由于实例是在Instance 属性方法内部创建的,因此类可以使用附加功能(例如,对子类进行实例化),即使它可能引入不想要的依赖性。
  •   直到对象要求产生一个实例才执行实例化;这种方法称为"惰性实例化"。惰性实例化避免了在应用程序启动时实例化不必要的 singleton。

 

2. 工厂方法模式(FactoryMethod)


意图

    1)定义一个用于创建对象的接口,让子类决定实例化哪一个类;

    2)使一个类的实例化延迟到其子类。 

优点

    实现了开闭原则,可以在不改变工厂的前提下增加新产品。

 


3. 抽象工厂模式(AbstractFactory)


意图

    用于创建一组相关或相互依赖的复杂对象。

 

附注:简单工厂、工厂方法、抽象工厂比较

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。

  •   简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。
  •   工厂方法:工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。
  •   抽象工厂:抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。

区别

  •   简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
  •   工厂模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)  
  •   抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)  

 

 

4. 建造者模式(Builder)

意图

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

优点

    采用建造者模式可以轻松地改变产品的内部表示。建造者模式将构造代码和表示代码分开。构造过程可以更精细地控制,生成器模式强调的是产品的构造过程,产品各部分具有依赖关系非常重要。

附注:与抽象工厂模式的比较

    生成器模式关注于将构造对象的过程和构造的各个部分分开,而抽象工厂关注于构建一个产品系列。实际上,最大的区别是生成器模式创建的产品不一定有共同的父类,只要有类似的构造过程即可。

 

5. 原型模式(ProtoType)

意图

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,也即通过一个已存在对象来进行新对象的创建。

优点

    引入Prototype模式后不再需要一个与具体产品等级结构平行的工厂方法类,减少了类的构造,同时客户程序可以在运行时刻建立和删除原型。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值