【大话设计模式】工厂三姐妹

    xiaoxiao2021-03-25  85

    简单工厂

    官方术语(我自己定义 的):

             专门定义一个来负责创建其他的类。

             简单工厂通过一个参数动态的实例化一个产品对象,被创建的实例通畅具有共同的父类或者接口

    角色及其职责:

             工厂类(Creator)角色:简单工厂模式的主要组成部分,它负责通过传进来的参数实现创建所有对象实例。如OPerationFactory类

             抽象(Product)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例的公共部分。如operation类

             具体产品(ConcreteProduct)角色:抽象产品类的子类,简单工厂模式的创建目标,,实现了抽象产品类中定义的所有接口方法。如operationADD类。

    优缺点:

             优点:通过传参,借助工厂类实现,去实例化某个对象的具体类对象。这样大大方便了用户直接根据工厂类去创建实例,免去了了解实例是如何创建和组织的。

             缺点:之所以用户不用判断实例是怎样创建和组织的,是因为所以的逻辑判断都集中在工厂类,当添加新功能时,需要修改工厂类,从而违背了开放——封闭原则,因为扩展性不好。

            

    工厂方法

    官方定义:

            定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

    角色及其职责:

             抽象工厂角色: 这是工厂方法模式的核心。是具体工厂角色必须实现的接口或者必须继承的父类。

             具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

             抽象产品角色:它是具体产品继承的父类或者是实现的接口。

             具体产品角色:具体工厂角色所创建的对象就是此角色的实例。

    优缺点:

             优点:改进了简单工厂中 的开放封闭性原则。

             缺点:增加了客户端和具体产品的依赖。

    抽象工厂

    官方定义:

             提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。

    角色及职责:

             抽象工厂:声明生成一系列抽象产品的方法

             具体工厂:执行生成一系列抽象产品的方法,生成一系列具体的产品

             抽象产品:为这一系列的某一种产品声明接口

             具体产品:定义具体工厂生成的具体产品的对象,实现产品接口

    优缺点:

             优点;方便的更换产品的系别。就像把宝马车的牌子换成奔驰车的牌子。

             缺点:增加同一系别下产品非常的困难。

    一句话解说工厂三姐妹区别:

             简单工厂:简单工厂的工厂类是一个静态的方法类,通过传参来实现对不同的对象实例化。

             工厂方法:为每一个产品提供一个工厂类,通过不同 的工厂来创建产品实例,例如大学生志愿者类,和社会志愿者类,正是因为如此,可以添加任意同等级产品。比如添加小学生志愿者,中学生志愿者等等。

             抽象工厂:他应该是一系列产品 的品牌。比如宝马车类,可以生产卡车,轿车等。奔驰车类,也可以生产卡车,轿车。在后期的扩展中增加一个车的品牌很简单,但是如果要增加一个品牌下的车型确实非常的复杂的,需要大量的修改,这就违背了封闭原则。

    转载请注明原文地址: https://ju.6miu.com/read-34942.html

    最新回复(0)