JAVA设计模式
前言
在面向对象编程过程中,创建对象一般采用new操作符来实现,有时new操作符创建对象可能需要一些“过程”来具体实现某些逻辑,这时候工厂模式就比较好的省略这些,直接实现“结果”,获取到调用者需要的对象。
一、工厂模式介绍
工厂模式就是将创建对象的具体过程隐藏,只提供对外创建对象接口。可分为三类:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
二、简单工厂模式
1. 定义
是提供一个创建对象的接口,将对象的创建和本身的业务逻辑分离开。
可分工厂类角色,抽象产品角色,具体产品角色
《设计模式》一书中将工厂模式分为两类:工厂方法模式与抽象工厂模式。将简单工厂模式看为工厂方法模式的一种特例,两者归为一类
2.优缺点
提供专门的工厂类创建对象,从而将对象的创建和业务隔离开,只需传入对应的参数即可,实现一定的系统灵活性;
但缺点在不符合“开闭原则”新增产品时需要修改原先的工厂,产品类型较多时,可能会造成工厂逻辑较为复杂,不利于系统维护。
三、工厂方法模式
1.定义
将工厂抽象化,提供一个创建对象的接口,通过具体实现工厂类来创建对应的对象产品,从而也达到“开闭原则”的设计。
可分为:抽象工厂,具体实现工厂,抽象产品,具体产品
2.优缺点
符合“开闭原则”,新增产品只需要增加对应的具体实现工厂,扩展修改也可以通过具体实现工厂来完成,
缺点每增加一个产品,就需要增加具体实现工厂和具体产品类,增加系统复杂和具体产品类的依赖
四、抽象工厂模式
1. 定义
创建相关对象的家族,每个具体实现工厂都可以创建多个产品并封装成一个对象
可分为:抽象工厂,具体实现工厂,抽象产品,具体产品
2.优缺点
通过抽象工厂模式,能够保证客户端只使用同一个产品族中的对象
但该模式的缺点在于添加新的行为时比较麻烦,如果需要添加一个新产品族对象时,需要更改接口及其下所有子类,这必然会带来很大的麻烦。
总结
工厂方法模式与抽象工厂模式的区别在于:
(1)工厂方法只有一个抽象产品类和一个抽象工厂类,但可以派生出多个具体产品类和具体工厂类,每个具体工厂类只能创建一个具体产品类的实例。
(2)抽象工厂模式拥有多个抽象产品类(产品族)和一个抽象工厂类,每个抽象产品类可以派生出多个具体产品类;抽象工厂类也可以派生出多个具体工厂类,同时每个具体工厂类可以创建多个具体产品类的实例