这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
设计模式02——工厂模式
简单工厂模式
简单工厂模式属于创建型模式,又叫做静态工厂方法模式,简单工厂模式实现了生成产品类的代码跟客户端代码分离,在工厂类中你可以添加所需的生成产品的逻辑代码,但是问题来了,优秀的java代码是符合“开放-封闭”原则的,也就是说对扩展是开放,对修改关闭,如果你要加一个产品类C,你就要修改工厂类里面的生成产品的代码,在这里你就要增加if-else判断。对于这个问题,我们的工厂方法模式就可以解决这个问题。
作用:将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类
优点:
- 隐藏具体实现
- 解耦
- 简单
缺点:
- 扩展麻烦,需要改动现有的代码
- 孤注一掷,所有的逻辑都放在一个工厂里面,一旦这个类出现什么问题,那么就全GG
工厂模式
工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去做。也就是说,工厂方法让类把实例化推迟到子类,它把工厂也抽象出一个接口来,让一个工厂只负责生产一种产品,解决了简单工厂不遵循“开放-关闭”原则的问题。
优点:
- 隐藏具体实现
- 解耦
- 简单
- 扩展方便。
缺点:
- 增加系统的负担
- 代码量剧增
- 一个工厂只能生产一个产品
抽象工厂模式
工厂模式中,每个工厂只能创建一类产品,这样不利于程序的扩展,因此就出现了抽象工厂模式,使得每个工厂可以创建多个产品。
简而言之,
| 模式 | 工厂-产品对应关系 |
|---|---|
| 工厂模式 | 一对一 |
| 抽象工厂模式 | 一对多 |
优点:
- 隐藏具体实现
- 解耦
- 简单
- 扩展产品结构的时候,多个产品类,只需要写一个工厂类
缺点:
- 扩展
产品族很费劲