简单工厂模式(学习笔记)

1. 简单工厂的概念

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

面向接口编程是java开发中的一个重要原则。接口的思想是“封装隔离”。而简单工厂的本质是选择接口的某个具体实现。 从而达到隔离接口的调用方(客户端)和接口的实现方的目的。接口的调用方,不需要知道接口的具体实现逻辑,只需要调用简单工厂类就可以创建一个接口的实现。针对不同的实现,接口的调用方或是传递实现类的类型参数,或是通过IOC/DI注入接口的实现类,或是把接口的实现类信息放置在配置文件里面。从而达到java的面向接口编程的封装隔离的目的。

注意简单工厂的重点在选择,实现是已经做好了的。就算实现再简单,也要由具体的实现类来实现,而不是在简单工厂里面来实现。简单工厂的目的在于为客户端来选择相应的实现,从而使得客户端和实现之间解耦。这样一来,具体实现发生了变化,就不用变动客户端了,这个变化会被简单工厂吸收和屏蔽掉。

2. 简单工厂的结构和说明

简单工厂的结构如下图所示。
简单工厂模式(学习笔记)_第1张图片

  • Api: 定义客户所需要的功能接口。
  • ImplA、ImplB: 具体实现Api的实现类,可能会有1个、2个或者多个。
  • Factory:工厂,选择合适的实现类来创建Api接口对象。
  • Client: 客户端,通过Factory来获取Api接口对象,然后面向Api接口编程。

3. 模式详解

上图所示的红色线框,就好比是一个组件的包装边界,表示接口、实现类和工厂类组合的一个组件。在这个封装体里面,只有接口和工厂是对外的也就是让外部知道并使用的,所以故意漏了一些在红线框外,而具体的实现类是不对外的,被完全包含在红线框内。
对于客户端而言,只是知道了接口Api和简单工厂Factory,通过Factory就可以获得Api了,这样就达到了让Client在不知道具体实现类的情况下获取接口Api。

以上,通过把客户端里面的“new Impl()”移动到简单工厂类里面,从而达到了对客户端(接口调用方)隔离接口实现类的目的。上图为简单工厂模式的形式化表示,也是该模式的本质关键所在,记住该图,有助于后续对该模式的进一步深入理解。

4. 结语

刚学习设计模式,设计模式给我的感觉是看着设计模式的时候,好像懂了。但一放下书本,或是相关的参考资料,差不多很快又忘了。所以,本次及后续写作设计模式学习笔记的目的,在于提供一个精简的设计模式版本,供相关学习者参考学习记忆之用。 通过把重要的知识记录下来,或是摘录,同时写下自己的理解,从而达到熟悉相关模式、方便记忆的目的,进而有助于后续深入理解相关模式。本次重点在于把基本的概念真正的消化,后续再深入细节。

5. 参考资源

《研磨设计模式》 陈臣、王斌 ,清华大学出版社,2011.5

你可能感兴趣的:(java开发)