设计模式之工厂三姐妹

一、简单工厂模式

定义

       简单工厂模式属于创建型模式,但它不属于23种GOF设计模式之一。简单工厂模式由一个工厂对象决定创建哪一种产品类的实例,实质是由工厂类根据所传的参数,动态的决定创建哪一种产品类的实例。

UML类图:

该模式中包含的角色和职责:

       简单工厂角色:这是简单工厂模式的核心,它负责创建所以实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。

       抽象产品角色:这是简单工厂所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

       具体产品角色:这是简单工厂的创建目标。

简单工厂模式优缺点分析:

优点:

       通过抽象,将对客户端的判断逻辑等压力转移到工厂类。简单工厂可以根据客户端给定的信息,决定究竟应该创建那个具体类的对象。客户端无需了解这些对象时如何创建及如何组织的。这有利于整个软件体系结构的优化。

缺点:

       1、由于工厂类聚集了所有实例的创建逻辑,当需求增加时,就必须增加一个与产品相对应的工厂类,相应的工厂类就需要重新编译一遍,违反了“开-闭原则。

       2、由于简单工厂模式的产品类是基于一个共同的接口或是抽象类,当产品种类增加的时候,即有不同的产品接口或是抽象类的时候,工厂类就需要判断常见哪一种种类的产品,简单工厂就相当于要做双重判断,先判断哪一种类型,再判断这种类型下的哪个产品。违反了单一职责原则。

       有了麻烦就要去解决它,所以又衍生出工厂方法。

二、工厂方法模式

定义:

       定义一个用于创建对象的接口,让子类决定实例化哪一个类。和简单工厂相比,工厂方法将类的实例化延迟到子类。

UML类图:

工厂方法模式优缺点分析:

优点:

       工厂方法模式客服了简单工厂违背开-闭原则的缺点,又保持了封装对象创建过程的优点,它是简单工厂模式的进一步抽象和推广。

缺点:

        每增加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。

        所以为了解决这个问题,有了抽象工厂模式。

三、抽象工厂模式

定义:

       Abstract Factory提供了一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式是所有设计模式中最具抽象性和一般性的一种形态。

UML类图:

       AbstractFactory抽象工厂接口,它里面应该包含所有的产品创建的抽象方法。

       ConcreteFactory1、ConcreteFactory2具体的工厂,创建具有特定实现的产品对象

       AbstractProductA、AbstractProductB抽象产品,它们都有可能有两种不同的实现。

抽象工厂模式的优点与缺点:

优点:

       1、易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。

       2、它让具体的创建实例过程与客户端分离,客户端是通过抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。

缺点:

       当需求来自增加功能,如要增加产品C,原来的两个产品类型(A、B)就变成三个产品类型(A、B、C),抽象工厂类AbstractFactory要增加一个方法CreateProductC(),然后,两个实现类都要修改,严重违反了开-闭原则。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值