简单工厂
官方术语(我自己定义 的):
专门定义一个来负责创建其他的类。
简单工厂通过一个参数动态的实例化一个产品对象,被创建的实例通畅具有共同的父类或者接口
角色及其职责:
工厂类(Creator)角色:简单工厂模式的主要组成部分,它负责通过传进来的参数实现创建所有对象实例。如OPerationFactory类
抽象(Product)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例的公共部分。如operation类
具体产品(ConcreteProduct)角色:抽象产品类的子类,简单工厂模式的创建目标,,实现了抽象产品类中定义的所有接口方法。如operationADD类。
优缺点:
优点:通过传参,借助工厂类实现,去实例化某个对象的具体类对象。这样大大方便了用户直接根据工厂类去创建实例,免去了了解实例是如何创建和组织的。
缺点:之所以用户不用判断实例是怎样创建和组织的,是因为所以的逻辑判断都集中在工厂类,当添加新功能时,需要修改工厂类,从而违背了开放——封闭原则,因为扩展性不好。
工厂方法
官方定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
角色及其职责:
抽象工厂角色: 这是工厂方法模式的核心。是具体工厂角色必须实现的接口或者必须继承的父类。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
优缺点:
优点:改进了简单工厂中 的开放封闭性原则。
缺点:增加了客户端和具体产品的依赖。
抽象工厂
官方定义:
提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。
角色及职责:
抽象工厂:声明生成一系列抽象产品的方法
具体工厂:执行生成一系列抽象产品的方法,生成一系列具体的产品
抽象产品:为这一系列的某一种产品声明接口
具体产品:定义具体工厂生成的具体产品的对象,实现产品接口
优缺点:
优点;方便的更换产品的系别。就像把宝马车的牌子换成奔驰车的牌子。
缺点:增加同一系别下产品非常的困难。
一句话解说工厂三姐妹区别:
简单工厂:简单工厂的工厂类是一个静态的方法类,通过传参来实现对不同的对象实例化。
工厂方法:为每一个产品提供一个工厂类,通过不同 的工厂来创建产品实例,例如大学生志愿者类,和社会志愿者类,正是因为如此,可以添加任意同等级产品。比如添加小学生志愿者,中学生志愿者等等。
抽象工厂:他应该是一系列产品 的品牌。比如宝马车类,可以生产卡车,轿车等。奔驰车类,也可以生产卡车,轿车。在后期的扩展中增加一个车的品牌很简单,但是如果要增加一个品牌下的车型确实非常的复杂的,需要大量的修改,这就违背了封闭原则。