设计模式:工厂方法和抽象工厂

时间:2022-10-02 19:02:36

在面向对象的软件编程中,主要有五个原则。

开放-封闭原则:对修改关闭,对增加开放。

依赖倒转原则:高层模块不应该依赖于底层模块。两个都应该依赖于抽象。抽象不应该依赖细节,细节应该依赖抽象。

迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

里氏代换原则:任何父类可以出现的地方,子类一定可以出现。

 

三个特性:

继承,封装,多态。


------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------------


在上面的五个原则中,开闭原则是面向对象的终极目标。但是这有理想主义的色彩。要完全实现,不太可能。之所以有了开闭原则,才有了后面的几个原则,后面的原则都是为其服务的。而设计模式的出现也是为了适应这些法则。在理解模式时,先理解上面的一些原则才行。

 

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

    工厂方法类图:

设计模式:工厂方法和抽象工厂

工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂来创建不同产品的实例。在同一等级的结构中,支持对任意产品的增加。

    好处:

1.  封装了对象创建的细节,将对象创建的代码和其他部分脱离。

2.  有利于同类对象创建的统一管理和控制。

3.  你关心的只是工厂方法返回的接口方法,不用关心实现细节。

 

    在简单的三层架构中,上一层简单的为下一层服务。违反了高层模块不应该依赖于底层模块。两个都应该依赖于抽象。抽象不应该依赖细节,细节应该依赖抽象。即依赖倒转原则,所以也违背了开闭原则。所以需要加一层抽象来实现下一层的调用。即工厂方法。这样在调用的时候依赖的是抽象,而不是具体,相应的对修改就关闭了,对添加开放了。

    PS:工厂方法只是单系列产品的工厂,工厂实现接口可以有很多不同的工厂,但是这里的工厂做的只能是同一类事情。

 

    抽象工厂

    工厂模式解决了同系列产品的增加,如果是新系列的产品增加,工厂模式就无能为力了。看一个抽象工厂创建Dao层和Manager层的实例。

         UML图

设计模式:工厂方法和抽象工厂

抽象工厂:提供一个创建一系列相关或相互依赖的接口,而无需指定他们具体的类。一系列相关或相互依赖的接口其实就是指的某些要实现的抽象。不同的工厂去创建相关的实现。而这些相关的实现实现了不同的接口。

   抽象工厂的最大好处就是克服了工厂模式不能增加新系列产品的弱点。在工厂模式中,每个工厂创建的都是一类的产品,对于新系列的产品增加不支持。如果支持新系列产品的增加就变成了上图所示的样子。即增加抽象工厂中的方法,这样就违背了开闭原则。所以肯定不能修改工厂类中的方法。

   到这里,抽象工厂就是可以创建多个系列产品,因为不能违背开闭原则,所以抽象工厂不支持新产品的增加。所以抽象工厂的缺点就是不能添加新产品。

   到这里,豁然开朗了,抽象工厂和工厂本来是一个东西,只是一个能创建新产品,一个能创建新系列而已。