白话理解设计模式之工厂设计模式

工厂模式分为三种:

简单工厂,工厂方法,抽象工厂

工厂模式的概念和作用:

代替new操作

也就是代替了平时我们都在使用的Student a = new Student();这种

工厂模式的好处:

给你系统带来更大的可扩展性和尽量少的修改量

也就是为了解耦:把对象的创建和使用的过程分开。就是Class A 想调用 Class B ,那么A只是调用B的方法,而至于B的实例化,就交给工厂类

介绍三种工厂:

1、简单工厂

构成:一个工厂类(普通的类,不是接口,不是抽象类),一个产品接口,多个产品

扫描二维码关注公众号,回复: 5455865 查看本文章

解释:想想我们工厂的作用,就是我们用工厂类来new对象,不用手动写了,所以在实际使用中,我们在工厂类中得到一个具体的产品对象

评价:这个是最简单的工厂,但是局限性是,如果我要新增一个产品,需要修改工厂类代码,不符合我们的java思想

2、工厂方法

构成:一个工厂接口,多个工厂类,多个产品接口,多个产品

解释:相当于多了一个工厂接口,几个工厂类都去实现它(不过每个工厂类只能生成一种产品,而这多个工厂就凑成了简单工厂中的多个产品的功能,只不过是降耦合)

评价:这样,在新增产品的时候,只用新增产品和产品工厂就可以,不用修改源代码

3、抽象工厂

构成:一个工厂接口,多个工厂类,多个产品接口,多个产品

解释:相当于多了一个工厂接口,几个工厂类都去实现它(不过每个工厂类只能生成一类产品(产品族))

评价:当产品中分类比较复杂时,用这个模式比较方便

举例子

比如有一个车(car)的接口,车下面有奔驰,宝马,奥迪(接口的子类,也就是产品),那么车工厂(CarFactory)中定义这几个产品,并且返回对应的对象,这就是简单工厂;问题来了,我们要是新增一个丰田车(产品),那么我们使用简单工厂就需要修改源码,这样不好,所以为了降低耦合,我们使用工厂方法,将奔驰,宝马,奥迪,丰田都写一个对应的工厂,且这几个工厂都对应同一个车工厂接口,这样再新增车型的话,我们新增工厂和对应产品就可以;但是问题又来了,如果每种品牌的SUV和轿车分类不同,那么我们使用抽象工厂,将对应的车工厂的方法增加,即可满足要求

备注:

以上这些都是个人理解,可能有不对的地方,但是我希望的是看到此文章可以迅速进行简单的理解,从而看大牛们的文章可以更加清晰

猜你喜欢

转载自blog.csdn.net/weixin_40903194/article/details/88292352