设计模式 创建型模式 抽象方法模式
概述
抽象方法模式是工厂方法模式的一种扩展,最简单的抽象方法模式会退化成了工厂方法模式,抽象方法模式提出了产品族的一个概念。那么什么是产品族呢?还是以汽车为例,汽车是一个产品的抽象,汽车的型号就是汽车的产品族比如,suv,轿车,跑车。如果工厂模式创建的不是一个简单的产品,而是多个产品族的情况,那么就需要使用抽象方法模式
类图
抽象方法模式需要以下几个角色
抽象工厂类
产品工厂类
抽象产品类
产品类
代码实现
1
2
3
4
5public abstract class AbstractCarFactory {
abstract void buildSuv();
abstract void buildJiaoche();
abstract void buildYueYeChe();
}public class BaoJunCarFactory extends AbstractCarFactory {
private BaojunCar baojunCar=new BaojunCar();
@Override
void buildSuv() {baojunCar.suv();
}
@Override
void buildJiaoche() {baojunCar.jiaoche();
}
@Override
void buildYueYeChe() {baojunCar.yueyeche();
}
}
1 | public class BMWCarFactory extends AbstractCarFactory { |
1 | public class BaojunCar implements Car { |
1 | public class BMWCar implements Car { |
1 | public interface Car { |
1 | public class Main { |
可以看到我们的抽象工厂定义了多个抽象方法,这也就是为什么叫抽象方法模式的原因了。实际上和工厂方法模式一样。只是有产品族抽象方法的概念
优缺点
优点:
- 复合高内聚低耦合的开发设计规范,抽象工厂模式将创建产品的逻辑收敛起来,如果更换产品只需要选择对应的工厂方法即可
- 增加具体产品工厂和产品很方便
- 当产品族中的多个对象一起工作的时候,客户端只能使用同一个产品族的对象
缺点:
- 开闭原则的倾斜性,增加产品和产品工厂很方便,增加产品族很困难,所以设计抽象方法的时候一定要尽可能多的设计抽象方法
应用场景
客户端切换界面主题, 各个控件对象的构造过程都收敛到同一个工厂类中
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment