创建型模式

2019-10-05  本文已影响0人  飞天流逝

一、工厂模式之间的关系

        简单工厂,工厂模式,抽象工厂,三种模式名字都有工厂,怎么可能没关系呢,其实就是后一个比前一个更开放的关系。

简单工厂里包含了一大堆产品的实现,调用方告诉我你要哪个产品,我给你哪个,一个高大上的if else写法。工厂模式开放了一些,我只定义工厂是生产产品的,各个产品的工厂按自己的标准去实现产品的生产逻辑,调用者麻烦点,自己去找想要的产品工厂生产,举个例子,大家都知道电脑厂是生产电脑的,那你想要联想的电脑,去找联想工厂要,你想要Dell的电脑,去找Dell工厂要,但是联想工厂和Dell工厂生产的都是电脑。抽象工厂更开放了一些,今天联想扩展产品线了,除了电脑还产点别的,比如打印机啊,投影仪啥的,那我们就彻底开放点,抽象工厂也支持你针对不同的产品创建工厂来生产。

二、介绍三种工厂模式

(一)、简单工厂(Simple Factory)

就是一个if else,一个类实现了所有类型产品的生产过程,你要联想类型的电脑,我给你联想电脑;你要Dell类型的电脑,我给你Dell电脑。

LianxianComputer computer1 = (LianxianComputer) SimpleFactory.getComputer("lianxian");

DellComputer computer2 = (DellComputer) SimpleFactory.getComputer("dell");

(二)、工厂模式(又叫工厂方法,Factory Pattern)

电脑,是一个产品,也就是一个类,比较抽象而已。联想电脑继承了这个抽象类并且实现了它,Dell电脑继承了这个抽象类并且实现了它。现在来看看工厂,简单工厂是一个大集合,里面啥都有。工厂方法默认你开发的时候不知道会有哪些牌子的电脑,比如今天又来了一个苹果电脑。所以有个生产电脑的工厂,也就是一个类,也是抽象的。今天咱们要生产联想电脑,好,来一个联想电脑工厂,专门return联想电脑产品。今天咱们又要生产Dell电脑,好,那再来一个Dell电脑工厂就好了,专门return Dell电脑产品。

(三)、抽象工厂(Abstract Factory)

电脑卖的好,产能升级了,联想要卖打印机了,Dell一看,竞争对手开始卖,我们也卖!但是没有打印机这个实体啊,就算有了,也没有对应的工厂来生产啊。不要紧,我们把工厂扩展下,让它也可以生产打印机,这样就好了,不用再加工厂类了,直接开始生产。

三、建造者模式(Builder)

这个模式就是方便你初始化一个类,比如今天初始化一个类要好多步骤,你可以先new,然后一步步set进去,但是set进去的可能又是个别的类啥的,这样你就得了解这个类的初始化原理,用起来贼费劲。用了建造者模式,每一步都会返回一个造好了的当前类实例,你再根据下一步要set的内容调用下一步的建造者方法就好了。举个例子,今天要生产一台电脑,但是电脑的cpu构建很复杂,内存构建很复杂,采用建造者模式,你就不用想着cpu咋造了,内存咋造了。你只要告诉builder你需要多少频率的cpu,多大容量的内存就好了。

LianxiangComputer computer = LianxianComputerBuilder.initCpu(2.2, 4) // 2.2GHz的4核                                                                                                      .initRAM(8).build() // 8G内存,调用build方法最终创建好一个computer

四、原型模式

说实话,没有特别领会原型模式的精髓。比如我打红色警戒,所有的兵都是从美国大兵变种的,那美国大兵就是一个原型,然后工程师呢就是给美国大兵加扳手,这是一个原型的实现;火箭飞行兵就是给美国大兵加飞行器,这是一个原型;然后你可以开始巴拉巴拉生产各种工程师和火箭飞行兵了,但是你生产出来的只能是工程师和火箭飞行兵,比如我想要一个带扳手的火箭飞行兵,对不起,原型模式不支持。

上一篇下一篇

猜你喜欢

热点阅读