Java设计模式-抽象工厂模式
来源:互联网 发布:联系打字软件 编辑:程序博客网 时间:2024/06/01 10:20
1、概念
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如宝马320系列使用空调型号A和发动机型号A,而宝马230系列使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为320系列生产相关配件时,就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。
当每个抽象产品都有多于一个的具体子类的时候(空调有型号A和B两种,发动机也有型号A和B两种),工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品(产品空调有两个具体产品空调A和空调B)。抽象工厂模式提供两个具体工厂角色(宝马320系列工厂和宝马230系列工厂),分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。
2、代码实现
//产品类//发动机以及型号 public interface Engine { } public class EngineA extends Engine{ public EngineA(){ System.out.println("制造-->EngineA"); } } public class EngineB extends Engine{ public EngineB(){ System.out.println("制造-->EngineB"); } } //空调以及型号 public interface Aircondition { } public class AirconditionA extends Aircondition{ public AirconditionA(){ System.out.println("制造-->AirconditionA"); } } public class AirconditionB extends Aircondition{ public AirconditionB(){ System.out.println("制造-->AirconditionB"); } }
//工厂类 public interface AbstractFactory { //制造发动机 public Engine createEngine(); //制造空调 public Aircondition createAircondition(); } //为宝马320系列生产配件 public class FactoryBMW320 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineA(); } @Override public Aircondition createAircondition() { return new AirconditionA(); } } //宝马523系列 public class FactoryBMW523 implements AbstractFactory { @Override public Engine createEngine() { return new EngineB(); } @Override public Aircondition createAircondition() { return new AirconditionB(); } }
//测试类public class Customer { public static void main(String[] args){ //生产宝马320系列配件 FactoryBMW320 factoryBMW320 = new FactoryBMW320(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); //生产宝马523系列配件 FactoryBMW523 factoryBMW523 = new FactoryBMW523(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); } }
3、三者区别
(1)简单工厂
简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
不修改代码的话,是无法扩展的。
(2)工厂方法
工厂方法是针对每一种产品提供一个工厂类,通过不同的工厂实例来创建不同的产品实例。
在同一等级结构中,支持增加任意产品。
(3)抽象工厂
抽象工厂是应对产品族概念的,比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。
应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。
(4)总结
(1)简单工厂:用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力);
(2)工厂方法:用来生产同一等级结构中的固定产品。(支持增加任意产品) ;
(3)抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族) ;
- java设计模式--抽象工厂
- Java设计模式-抽象工厂
- Java设计模式--抽象工厂
- java设计模式-抽象工厂
- Java设计模式-抽象工厂设计模式
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式_抽象工厂模式
- Java设计模式之抽象工厂模式
- 设计模式(JAVA)------抽象工厂模式
- java设计模式之抽象工厂模式
- 【Java设计模式】之抽象工厂模式
- java设计模式---抽象工厂模式
- java设计模式---抽象工厂模式
- java设计模式---抽象工厂模式
- JAVA系列-设计模式-抽象工厂模式
- java设计模式 之 抽象工厂模式
- Java--设计模式之抽象工厂模式
- Android版本和VERSION_CODE
- 支付宝通知页面notify_url、返回页面return_url
- 机器学习性能改善备忘单:32个帮你做出更好预测模型的技巧和窍门
- 电磁干扰的主要来源
- Andorid Tv 开发 基础以及 应用安装上打不开,没图标以及遥控器选择的问题
- Java设计模式-抽象工厂模式
- 最小二乘法
- freemarker 中list循环 时间处理
- UINavigationController注意事项
- 二、关于Apache的版本
- 从零开始:微信小程序新手入门宝典(正在更新)
- log4net基础应用,实现项目日志文件开启!
- 【iOS】导航栏和工具栏
- git 命令