![ad20ef70fbff27a04a897f6fc8d9b64e.png](https://img-blog.csdnimg.cn/img_convert/ad20ef70fbff27a04a897f6fc8d9b64e.png)
工厂模式分为三类:
1、简单工厂模式
2、工厂方法模式
3、抽象工厂模式
那么问题来了,什么是工厂模式?what‘s this???
专业的定义:实现了创建者和调用者的分离。
核心本质:
-----------实例化对象,用工厂方法代替new操作。
Oh,My God,我即使背下来我也不理解,有个鸟用呀,学习一定要理解思想,又不是文科背诵对吧?
好了,说了这么多,关死记硬背肯定是不行的,我们这里先学习简单工厂模式,后面的两个明天后天再学
首先,我想开车,我想开车,我想开车,怎么办呢?用Java代码实现如下:
1、定义一个车的接口
![76225dbba48596324f08f6899160b86a.png](https://img-blog.csdnimg.cn/img_convert/76225dbba48596324f08f6899160b86a.png)
2、定义2个实现车接口的类,这里是奥迪车和比亚迪车
![78949768f7ac43c0b3a75f7a36d29c81.png](https://img-blog.csdnimg.cn/img_convert/78949768f7ac43c0b3a75f7a36d29c81.png)
![1986157d3ae579f95bfcd5e20e837cee.png](https://img-blog.csdnimg.cn/img_convert/1986157d3ae579f95bfcd5e20e837cee.png)
3、好了,现在有车的图纸了,我要开车了。。。
![9dda361a7fd98d8f3bd319ea6f229edc.png](https://img-blog.csdnimg.cn/img_convert/9dda361a7fd98d8f3bd319ea6f229edc.png)
这样我就能开车了,但是,有没有发现一个问题,就是我要开车,为什么非得要我去创建车呢?虽然我能创造车(假设),但是太浪费时间了有没有,而且每次都得去创建我想开的那种车,有没有办法能解决我不用创建车就能开车了呢?
答:简单工厂模式
我们只需要创建一个工厂类,
![ff9663bc82e157207773aca231528a1c.png](https://img-blog.csdnimg.cn/img_convert/ff9663bc82e157207773aca231528a1c.png)
这样,我们想开车的时候,就不用自己造了(new),而是直接去工厂取就行了。。。
![4f2b21a836155c3f6cc2257cd9b3e72e.png](https://img-blog.csdnimg.cn/img_convert/4f2b21a836155c3f6cc2257cd9b3e72e.png)
是不是很简单就实现了,这样我们需要什么车的时候,就去创建一个那个车的类去实现Car接口,在工厂类中添加对应的代码,但是它违反了设计模式的
– OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开 放,对修改关闭。
不过对于我们来说无所谓,我们不是写JDK,这样的小瑕丝是可以容忍的
下面放上两张UMR图:
不使用简单工厂模式:
![949a1d233a531d8c0561db3e9823f0d1.png](https://img-blog.csdnimg.cn/img_convert/949a1d233a531d8c0561db3e9823f0d1.png)
这里的Clinent01也就是我们的TestDriver类,名字不同而已,可以发现,这个类需要去和每个类都去打交道。
使用简单工厂模式:
![3dfeb1fde3f868b803bf008a6e8e036c.png](https://img-blog.csdnimg.cn/img_convert/3dfeb1fde3f868b803bf008a6e8e036c.png)
Client是我们的TestDriver类,可以看出,只需要和工厂和Car打交道就行了。。。。
总结:不管学习涉及模式,还是学习数据结构算法,还是其他,思想很重要,理解了前人的智慧结晶很重要,敲上代码10遍也不理解,那是打字员了。