抽象工厂和工厂方法模式

工厂方法模式

简单的来说,工厂方法模式就是将简单工厂模式解耦,将工厂类细分,使得我们添加品牌的时候不用去修改源代码,只需要自己添加一个类就可以了,简单工厂模式可以看下我的上篇博客。
同样的案例
顾客要去4s店买车,有BMW,Aodi两种选择
工厂可以有奥迪的工厂,可以有宝马的工厂,我们先画个图分析一下
在这里插入图片描述
那么我们就可以先简单的写出来这三个类
在这里插入图片描述
奥迪工厂负责生产奥迪的车,故返回奥迪4s店AodiCar
在这里插入图片描述
宝马的工厂负责生产宝马的车,故返回BMWCar
在这里插入图片描述
有奥迪的4s店,有宝马的4s店,但是他们都是卖车的,或是售后,修车,有相同的服务
在这里插入图片描述
以下为服务这个接口
在这里插入图片描述
奥迪4s店继承这个接口,并卖出车
在这里插入图片描述
宝马4s店继承这个接口,并卖出车
在这里插入图片描述
所以我们的整体结构图就很清楚了
在这里插入图片描述
此工厂方法模式的优点是:
当你想增加一个品牌时,只需要自己添加一个工厂类和4s点就行了,不需要改动其他的代码,更符合开闭原则。
每个工厂类只用负责自己的产品,更符合单一职责原则,大大的降低了代码的耦合度
但是工厂方法模式有很大的缺点,就是我们每次需要新加一个品牌时都至少需要新添加一个工厂类和一个4s店类,使得java文件越来越多了,并且每个工厂只生产一种商品,造成了资源浪费

2.抽象工厂模式

	拿以上案例来说,我们可以有一个工厂接口,来负责去生产卡车还是轿车,其中有两个方法

在这里插入图片描述
一个跑车接口,负责生产跑车
在这里插入图片描述

													                          一个轿车接口,负责生产轿车

在这里插入图片描述
宝马跑车类继承跑车接口就拥有了造跑车的能力,宝马轿车类继承轿车接口就拥有了造轿车的能力
在这里插入图片描述
在这里插入图片描述
同理奥迪跑车类继承跑车接口就拥有了造跑车的能力,奥迪轿车类继承轿车接口就拥有了造轿车的能力
在这里插入图片描述
在这里插入图片描述
奥迪工厂类继承工厂类就拥有了造跑车和轿车的能力
在这里插入图片描述
同理宝马工厂类继承工厂类就拥有了造跑车和轿车的能力
在这里插入图片描述
此时消费者类运行代码为
在这里插入图片描述
以下附上整体代码的结构图
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值