工厂方法模式(学习笔记)

1. 概念

设计模式主要分为三大类型:(1)创建型模式;(2)结构型模式;(3)行为型模式。其中,工厂方法模式属于创建型模式。以下是工厂方法模式的定义:

定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。

工厂方法模式的特点是让父类在不知道产品接口具体实现子类的情况下,完成产品接口对象的创建,具体的实现选择延迟到工厂方法类的子类中进行。工厂方法的本质就是延迟到工厂方法类的子类来选择实现“产品接口需要的产品子类对象”。 工厂方法模式中的工厂方法,在真正实现的时候,通常是先选择使用哪一个具体产品实现类,利用该类来创建具体产品实现对象,然后返回给客户端(调用方)。也就是说,工厂方法本身并不会去实现产品接口,具体的产品选择实现已经由工厂方法的子类完成,工厂方法只要去选择工厂方法子类来创建实现产品接口的具体产品对象即可。

注意:

工厂方法的实现中,通常父类会是一个抽象类,里面包含创建所需对象的抽象方法,这些抽象方法就是工厂方法。子类在实现这些抽象方法的时候,通常并不是真正地由子类来实现具体的功能,而是在子类的方法里面做选择,选择具体的产品实现对象。

2. 结构和说明

工厂方法的结构如下图所示。
在这里插入图片描述

  • Product:定义工厂方法所创建的对象的接口,也就是实际需要使用的对象的接口。
  • ProductImpl1、ProductImpl2:具体的Product接口的实现对象。
  • Creator:创建器,声明工厂方法,工厂方法通常会返回一个Product类型的实例对象,而且多是抽象方法。也可以在Creator里面提供工厂方法的默认实现,让工厂方法返回一个缺省的Product类型的实例对象。
  • CreatorImpl1、CreatorImpl2:具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product子类(实现接口的类)实例。

3. 与简单工厂的关系

下图为工厂方法模式
在这里插入图片描述

下图为简单工厂模式
在这里插入图片描述
通过对比发现,工厂方法的本质也是选择实现,跟简单工厂的区别在于工厂方法模式是把选择具体实现的功能延迟到子类来实现。
如果把工厂方法模式中选择的实现放到父类来直接选择实现,那就退化为简单工厂。反之,简单工厂模式中,如果把选择具体实现的功能,放到其子类中实现,那就进化为工厂模式。

4. 模式详解

工厂方法模式可以在不知道产品对象具体实现的情况下进行编程。在实现功能的时候,如果需要某个产品实现对象,只需要使用产品对象的接口即可,而无需关心具体的实现。选择具体的实现的任务延迟到子类来完成。工厂方法给工厂方法子类提供了一个挂钩,使得扩展新的对象版本变得非常容易,也体现了对扩展开放,对修改关闭的面向对象设计的OCP原则

5. 结语

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

6. 参考资源

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

猜你喜欢

转载自blog.csdn.net/fanjianglin/article/details/112444453