设计模式总结1--工厂三姐妹

前言:设计模式的总结已经开始,回想起来自己也有一段时间没有好好总结了,虽说自考很重要,但若经常因为这种时间分配不均的情况而顾此失彼,这不是我们倡导的学习方法,所以,还要不断进步啊~

今天要总结的,是设计模式中的三个模式--工厂三姐妹:简单工厂模式、工厂方法模式,和抽象工厂模式。

首先我们来看一下三个工厂的各自定义:

1.简单工厂模式:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

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

3.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

 

三个定义各不相同,但其实都有一个共同点,当然,既然我今天把它们放到一起说,那肯定是因为有相通点的:都是工厂来实现类,而并非单纯的客户端实现功能。这样当然是为了提高代码的复用性与可维护性。

 

说完相同点,我们来谈一谈不同点:而这就要从我对这三个模式的个性解读来说起了--毕竟这些定义对于初学者来讲很不友好,还需要自己好好消化一番才能解决。

 

1.简单工厂模式不需要多讲解,而从设计模式来看,它并不能算是一个合格的设计模式:因为它违反了开放-封闭原则:软件的实体(类、模块、函数等)可以扩展,但不可修改。

简单工厂模式的UML图:(以运算类为例)

由于通过一个大工厂用来实例化各种类,使得当提出新需求时(比如在原有的一个运算工厂中,新增了一个“打折”的计算方式,这就需要修改这个工厂)不得不对已经写好的工厂类进行重新修改,这样大大增加了代码的维护难度。从UML图中也可体现出来。

 

2.工厂方法模式的个性化理解:简单来讲就是某个具体类是由对应的具体工厂来实现的

工厂方法模式的UML图:(同样以运算类为例)

工厂方法模式与简单工厂模式的最大不同就是建立了许多与运算子类相对应的子工厂,每个子工厂实现一个子类。

这种模式解决了简单工厂模式中违反开-闭原则的问题:若要加入新算法,只需增加一个子工厂与这个类即可。

 

3.抽象工厂模式的个性化理解:抽象工厂模式是工厂方法模式的一个延伸:可以实现多个不同层级的类(产品类A和产品类B)。

工厂方法模式是只有一个层次(加减乘除都属于运算类),而抽象工厂中有多个层次,比如一家人需要外出旅行,既要开车,又要拿包,还要拿餐具,这三类东西都不属于一个层级,而抽象工厂要做的就是实现这几个不同层级的事物。

抽象工厂模式的UML图:

 

 

猜你喜欢

转载自blog.csdn.net/Marshallren/article/details/88625567