设计模式(java)

工厂模式

2019-01-15  本文已影响0人  greensure

目录

1、工厂模式概念

2、工厂模式的意图

3、什么情况下适合工厂模式

4、工厂模式的设计思想

5、工厂模式的应用场景

6、工厂模式的优缺点

7、工厂方法模式和抽象工厂模式对比



参考资料:

https://www.imooc.com/learn/261

https://blog.csdn.net/wfg18801733667/article/details/60954744

工厂模式实践代码

1、工厂模式概念

实例化对象,用工厂方法代替new操作。

工厂模式包括工厂方法模式、抽象工厂模式。

抽象工厂模式是工厂方法模式的扩展。

2、工厂模式的意图

定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。

工厂方法把实例化的工作推迟到子类中去实现。

项目中的现状:

在软件系统中经常面临着“对象”的创建工作,由于需求的变化,这个对象可能随之也会发生变化,但它却拥有比较稳定的接口。

为此,我们需要提供一种封装机制来隔离出这个易变对象的变化,从而保持系统中其他依赖该对象的对象不随着需求变化而变化。

如果我改变了某个对象,希望依赖于他的对象不随之发生变化;

3、什么情况下适合工厂模式

(1)有一组类似的对象需要创建;

(2)在编码时不能预见需要创建哪种类的实例;

(3)系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节;

工厂类负责创建的对象比较少,客户只需要传入工厂类参数,对于如何创建对象(逻辑)不关心。

简单工厂模式很容易违反高内聚低耦合的原则,因此一般只在很简单的情况下使用。

4、工厂模式的设计思想

基于项目现状将代码进行如下设计:

1)、尽量松耦合,一个对象的依赖对象的变化与本身无关

2)、具体产品与客户剥离,责任分割

5、工厂模式的应用场景

工厂模式的使用场景:

工厂类负责创建的对象比较少,客户只需要传入工厂类参数,对于如何创建对象(逻辑)不关心。

简单工厂模式很容易违反高内聚低耦合的原则,因此一般只在很简单的情况下使用。

工厂模式适用于哪些场景:

1、一个系统应当不依赖产品类实例被创立,组成,和表示的细节。这对应所有形态的工厂模式都是重要的;

2、这个系统的产品至少有一个的产品族;

3、同属于同一个产品族的产品是设计成在一起使用的。这一约束必须得在系统的设计中体现出来;

4、不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现的细节;

工厂方法模式的使用场景:

1)、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

2)、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

3)、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

抽象工厂的使用场景:

系统的产品多于一个产品族,而系统只消费某一族的产品。

6、工厂模式的优缺点

优点:

工厂模式的实现帮助我们:

1、系统可以在不修改具体工厂角色的情况下引进新的产品;

2、客户端不必关心对象如何创建,明确了职责;

3、更好的理解面向对象的原则,面向接口编程,而不要面向实现编程;

(1)工厂模式的优点

最大的优点在于工厂类中包含了必要的逻辑,根据客户需要的逻辑动态实例化相关的类。

(2)工厂方法模式的优点

创建对象的接口,让子类决定具体实例化的对象,把简单的内部逻辑判断移到了客户端。

工厂方法模式克服了简单工厂所违背的开闭原则的缺点,又保持了封装对象创建过程的优点。

扩展性高,想要增加一个产品,只要扩展一个工厂类就可以。

(3)抽象工厂的优点

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点

** (1)简单工厂模式的缺点**

每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。

7、工厂方法模式和抽象工厂模式对比

1、工厂模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广;

2、工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的登记结构;

3、工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类;

总结

无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。在使用时,我们不必去在意这个模式到底工厂方法模式还是抽象工厂模式,因为他们之间的演变常常是令人琢磨不透的。经常你会发现,明明使用的工厂方法模式,当新需求来临,稍加修改,加入了一个新方法后,由于类中的产品构成了不同等级结构中的产品族,它就变成抽象工厂模式了;而对于抽象工厂模式,当减少一个方法使的提供的产品不再构成产品族之后,它就演变成了工厂方法模式。


所以,在使用工厂模式时,只需要关心降低耦合度的目的是否达到了。

上一篇 下一篇

猜你喜欢

热点阅读