概述
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

 适用性

    1.一个系统要独立于它的产品的创建、组合和表示时。2.一个系统要由多个产品系列中的一个来配置时。3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。

 参与者

    1.AbstractFactory声明一个创建抽象产品对象的操作接口。2.ConcreteFactory实现创建具体产品对象的操作。3.AbstractProduct为一类产品对象声明一个接口。4.ConcreteProduct定义一个将被相应的具体工厂创建的产品对象。实现AbstractProduct接口。5.Client仅使用由AbstractFactory和AbstractProduct类声明的接口

上面是一些很正统的解释,总结上面的概念,我可以认为抽象工厂模式是在以下情况适用:
举买车的例子:
买车的时候我们不会特意去关注车子的是如何组成的,以及车子组装的细节,因为这不是我们考虑的(也就是说一个
系统不依赖产品实例如何被创建、组合和表达 的细节)。
当然车的种类有很多种,因此我们有很多选项(系统的产品是多于一个族以上的,系统只消费其中一个)。
在消费时,如果我们选定了一种牌子的车型,那我们肯定是买下这整部车,而不是只消费一小部分;一种牌子的车
型,我们可以称它为一个产品族,因此同一个产品族的产品是在一起使用的。
                                           
                                 
代码描述:
发动机接口与具体实现:
/*** 发动机接口* @author Linhai Gu**/
public interface Motor {public void motor();
}
public class AoDiMotor implements Motor{private String name=null;public AoDiMotor(String name) {this.name=name;}@Overridepublic void motor() {System.out.println(name+"的发动机");}}
public class BaoMaMotor implements Motor{private String name=null;public BaoMaMotor(String name) {this.name=name;}@Overridepublic void motor() {System.out.println(name+"的发动机");}
}
轮胎接口与具体实现:
/*** 轮胎接口* @author Linhai Gu**/
public interface Tyre {public void tyre();
}
public class AoDiTyre implements Tyre{private String name=null;public AoDiTyre(String name) {this.name=name;}@Overridepublic void tyre() {System.out.println(name+"的轮胎");}}
public class BaoMaTyre implements Tyre{private String name=null;public BaoMaTyre(String name) {this.name=name;}@Overridepublic void tyre() {System.out.println(name+"的轮胎");}
}

方向盘接口与具体实现:

/*** 方向盘接口* @author Linhai Gu**/
public interface SteeringWhell {public void steeringWhell();
}
public class AoDiSteeringWhell implements SteeringWhell{private String name=null;public AoDiSteeringWhell(String name) {this.name=name;}@Overridepublic void steeringWhell() {System.out.println(name+"的方向盘");}}
public class BaoMaSteeringWhell implements SteeringWhell{private String name=null;public BaoMaSteeringWhell(String name) {this.name=name;}@Overridepublic void steeringWhell() {System.out.println(name+"的方向盘");}
}

抽象工厂类:

public interface AbstractFactory {/** 创建Motor对象*/public Motor creatMotor();/** 创建Tyre对象*/public Tyre  creatTyre();/** 创建SteeringWhell对象*/public SteeringWhell creatSteeringWhell();}

实现类:

public class AoDiFactory implements AbstractFactory{@Overridepublic Motor creatMotor() {// TODO Auto-generated method stubreturn new AoDiMotor("奥迪");}@Overridepublic Tyre creatTyre() {// TODO Auto-generated method stubreturn new AoDiTyre("奥迪");}@Overridepublic SteeringWhell creatSteeringWhell() {// TODO Auto-generated method stubreturn new AoDiSteeringWhell("奥迪");}}
public class BaoMaFactory implements AbstractFactory{@Overridepublic Motor creatMotor() {// TODO Auto-generated method stubreturn new BaoMaMotor("宝马");}@Overridepublic Tyre creatTyre() {// TODO Auto-generated method stubreturn new BaoMaTyre("宝马");}@Overridepublic SteeringWhell creatSteeringWhell() {// TODO Auto-generated method stubreturn new BaoMaSteeringWhell("宝马");}}

品牌厂家制造车类:

</pre><pre name="code" class="java">public class CarEngineer {//车需要的发动机private Motor motor=null;//车需要的轮胎private Tyre tyre=null;//车需要的方向盘private SteeringWhell steeringWhell=null;public void makeCar(AbstractFactory af){this.motor=af.creatMotor();this.tyre=af.creatTyre();this.steeringWhell=af.creatSteeringWhell();this.motor.motor();this.tyre.tyre();this.steeringWhell.steeringWhell();}}

测试:

public class Test {public static void main(String[] args) {// TODO Auto-generated method stub//品牌厂家CarEngineer carEngineer=new CarEngineer();//客户1选的牌子AbstractFactory aoDi=new AoDiFactory();//客户2选的牌子AbstractFactory baoMa=new BaoMaFactory();//厂家推出System.out.println("客户1:");carEngineer.makeCar(aoDi);System.out.println("客户2:");carEngineer.makeCar(baoMa);}}

运行结果:

可能大家从上面看出,如果要给整个产品族添加一个新的产品,就得修改抽象工厂,也就意味着需要修改所有的工厂实现类,因此抽象工厂模式不太容易扩展新的产品
转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/42084395    情绪控_

创建型模式--抽象工厂模式相关推荐

  1. 每天学习一个设计模式(八):创建型之抽象工厂模式

    目录 一.基本概念 二.通俗解释 三.应用场景 1.使用简单工厂模式的解决方案 2.抽象工厂模式 抽象工厂模式结构 在什么情况下应当使用抽象工厂模式 抽象工厂模式的起源 四.抽象工厂模式的优缺点 抽象 ...

  2. 创建型设计模式——抽象工厂模式

    1.什么是抽象工厂模式? 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 从设计层面看,抽 ...

  3. 创建型模式——抽象工厂模式

    一. 实验目的与要求 1.练习使用工厂模式.设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点. 2.实验结束后,对相关内容进行总结. 二.实验内容 1.模式应用场景说明 手机CPU生产工厂:在 ...

  4. 创建型模式-抽象工厂模式

    抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...

  5. 软件架构设计师-创建型模式-单例模式-原型模式-工厂方法模式-抽象工厂模式-建造者模式

    文章目录 1.单例模式 2.原型模式 3.工厂方法(Factory Method)模式 4.抽象工厂(AbstractFactory)模式 5.建造者(Builder)模式 6.作者答疑   在面向对 ...

  6. 设计模式-创建型模式-抽象工厂模式

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

  7. 创建型设计模式之工厂模式

    文章目录 一.工厂设计模式 二.工厂设计模式详解 1.简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 总结 一.工厂设计模式 工厂模式就类比实际生活中的工厂,在实际生活中,用户从来不会关系一个物 ...

  8. Java设计模式—工厂方法模式抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  9. 软件设计模式之工厂模式抽象工厂模式

    一.工厂模式 工厂方法模式(别名:虚拟构造):定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 工厂方法模式的关键是在一个接口或抽象类中 ...

  10. Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式

    本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...

最新文章

  1. [PHP]php基础练习题学习随笔
  2. Unity3d载入外部图片文件
  3. Android 获取SD卡路径和判断SD卡是否存在.
  4. IO Streams:缓冲流
  5. linux笔记之 raid
  6. 实现工具自由!开源的桌面工具箱
  7. ffmpeg 音乐循环_[宜配屋]听图阁
  8. 2015/8/29 Python基础(3):数值
  9. SQLServer2008设置开启INTERNET远程连接
  10. 计算机和机械交叉学科会议期刊,机器视觉相关的研究团队
  11. 零基础自学SQL课程 | SQL中的日期函数大全
  12. 【很简单的教程】如何提取模型每层的特征【以ResNet为例】
  13. PS cc 2018安装教程
  14. js生成8位随机字符串密码
  15. 苹果致力于手势再生研发,无须使用控制器即可与 ARKit 交互?
  16. 关于推送消息的简要分析
  17. centos7 配置ssh
  18. cmd批处理,webStrom/phpStrom/.....IDE工具编译
  19. virtualbox7虚拟机中安装苹果macOS big sur系统详细教程
  20. 6款超实用的工具,职场小白也会用!

热门文章

  1. java 执行cmd 堵塞_java中调用cmd命令被阻塞无法返回和继续执行
  2. pmp知识点详解-项目大牛整理_PMP核心知识点—第五章:项目范围管理(1)
  3. windows10远程桌面连接及问题解决
  4. SSO 认证机制对比
  5. Python之配置日志模块logging
  6. apr提高tomcat的web性能
  7. N个免费DevOps开源工具,没用过,至少应该了解!
  8. 百度推出飓风算法,严厉打击恶劣采集
  9. MIna框架I/O Service层设计
  10. bash shell实现二进制与十进制数的互转