设计模式是遵循设计原则来的,所以理解设计模式之前请先理解设计原则,这样才更好的理解设计模式。
设计模式目的:都是为降低耦合,方便扩展
三种模式关键理解的地方在有多少角色组成
简单工厂模式:
它由三种角色组成:
- 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。
- 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。
- 具体产品角色:工厂类所创建的对象就是此角色的实例。由一个具体类实现,如例子中的Benz、Bmw类。
整体上理解为,我们首先创建抽象Car接口,然后具体实现有Benz、Bmw类,然后再由我们的工厂类Driver来具体使用Benz(奔驰)、Bmw(宝马)类。
简单工厂模式的缺点:
工厂类不太理想,因为每增加一辆车,都要在工厂类中增加相应的商业逻辑和判 断逻辑,这显自然是违背开闭原则的,因此要用工厂模式来优化
工厂方法模式:
- 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。它由抽象Driver类或者接口来实现。
- 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。它由具体的BenzDriver(奔驰司机)、BmwDriver(宝马司机)类来实现。
- 抽象产品角色:它是具体产品继承的父类或者是实现的接口。一般由抽象类或者Car接口。
- 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。由具体的Benz(奔驰)、Bmw(宝马)类来实现。
整体上理解为,我们首先创建抽象Car接口,然后具体实现有Benz、Bmw类,然后我们在创建抽象工厂类Drive,BenzDriver(奔驰司机)、BmwDriver(宝马司机)类来实现抽象工厂,具体工厂里面再具体调用那种车。
优点:
其实这样已经能解决、应付我们可能遇到的大部分业务需求
抽象工厂模式
出现的原因:
但是当产品种类非常多时,就会出现大量的与之对应的工厂类,这就很糟糕,这就是它出现的原因。
先来看下什么是产品树和产品族?
产品树类比如:奔驰车、宝马车,这两种车都是最顶层的。
产品族类比如:商务奔驰车和商务宝马车,这两个就组成产品族。都是商务类型,但是由不同一个顶点出发,我们就称之为他们为族。
抽象工厂模式的各个角色(和工厂方法的如出一辙):
- 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。它由抽象类或者接口来实现。
- 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。它由具体类来实现。
- 抽象产品角色:它是具体产品继承的父类或者是实现的接口。一般由抽象类或者Car接口。
- 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。由具体的Benz(奔驰)、Bmw(宝马)类来实现。
其他代码类参考:
https://www.cnblogs.com/zhangchenliang/p/3700820.html