设计模式学习(一)——工厂模式
写在前面的话:
设计模式无论是设计时还是在面试时,都会涉及到。但是本人平常并未太注意,了解程度也是模棱两可,以前也曾整理,但多是文档保存随意以致丢失。最近空闲时间,想整理成档,方便以后温习。
内容素材少部分来自网络,图书,视频等,如原作者需要注明来处的,我会及时补充说明来源。
第一次写博客,有不足之处请大家指出,我必定弥补学习。
————————————————————————————————————————————————
工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory)。
这两个模式区别只在于需要创建对象的复杂程度上
工厂方法:
刚好快到中秋节,就拿做月饼这事说吧。生产厂家购买了两条月饼生产线, 分别生产A类月饼和B类月饼,那这两条线肯定是都能生产月饼的。
即然是月饼就要有月饼,所有月饼都有的属性就是皮和馅,建一个月饼的类,

再建一个A、B两线生产线,因为两生产线都是用来生产月饼的,所以建一个接口,A、B都去实现这个接口

为了方便以为我们去使用两条生产线,我们建立一个工厂。此处我们直接返回接口Produce 类型引用,赋值为空,实例化时看具体情况。

进行一下测试,此处,只需要改变type的值就能得到不同的结果,“ProducerFactory.getProducer(type).makeMooncake()”部分代码则不需要修改。

而后期需要添加新的月饼类型,只需要添加新类型生产线,而不需要对已有的生产线(A,B) 进行改动,main里的代码只需要添加新类型type对应的名称即可生产新类型月饼。
抽象工厂方法:
按字面意思很好理解,就是把工厂也抽象化,为的是factory的扩展性。接着上面的例子往下说,现在月饼做出来了,要上市销售,就需要好的包装,那就要做月饼盒子。
先把Box的生产线给做出来:

现在一个产品由两部分组成,所以把工厂方法也抽象了,让工厂一次性把一个产品的两个部分都做了。

两个具体的工厂去实这个工厂

现在去做个测试

实际使用过程中,两种月饼与两种盒子是可以产生四种组合,改变Factory实例即可实现 ,下面写出其中一种:
即A包装(绿色装)里面装的是B类型月饼(厚皮荤馅)

面试过程中会经常问到工厂模式关系视图,那就整个干货,关系图如下:

****有不足之处,还请大家指出,必定学习弥补,和大家一起共同成长,共同进步****

浙公网安备 33010602011771号