1.模式定义:

抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类

2.模式特点:

抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品;

3.使用场景:

为创建一组对象提供了一种解决方案;

4.模式实现:

  (1)抽象工厂角色:

这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
//发动机以及型号
public interface Engine {
}
public class EngineA extends Engine{    public EngineA(){    System.out.println("制造-->EngineA");    }
}
public class EngineBextends 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"); }
}   

  (2)具体工厂角色:

它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
//创建工厂的接口
public interface AbstractFactory {    //制造发动机  public Engine createEngine();  //制造空调   public Aircondition createAircondition();
}   

  (3)抽象产品角色:

它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
//为宝马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();    }
}   

  (4)具体产品角色:

具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
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();  }
}  

5.优缺点:

  (1)抽象工厂模式优点:

[1]分离接口和实现:客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦;
[2]使切换产品族变得容易:因为一个具体的工厂实现代表的是一个产品族.
[3]向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象 

  (2)抽象工厂模式缺点:

不太容易扩展新的产品:如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类;

转载于:https://www.cnblogs.com/yysbolg/p/7410567.html

设计模式(4)--AbstractFactory(抽象工厂模式)--创建型相关推荐

  1. AbstractFactory抽象工厂模式(创建型模式)

    1.new 的问题 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对具体实例的变化 怎么理解上面这句话呢? 可以这样理解:我 ...

  2. JavaScript 23 种设计模式之 4 抽象工厂模式

    JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...

  3. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  4. 设计模式二、抽象工厂模式

    设计模式part2 1.     抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...

  5. C++设计模式之工厂模式(创建型模式)

    学习软件设计,向OO高手迈进! 设计模式(Design pattern)是软件开发人员在软件开发过程中面临的一般问题的解决方案. 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来 ...

  6. FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式

    具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详细原理介绍. 1.在FactoryMet ...

  7. 【设计模式】之抽象工厂模式

    创造性设计模式 创造型模式主要是为了实例化类所用.进一步又分为类创建.对象创建模式. 类创建模式 类创建模式主要基于继承方式进行实例化 对象创建模式 对象创建模式主要基于委托机制进行实例化 Abstr ...

  8. 【设计模式】之抽象工厂模式详解与应用(三)

    开心一刻 [问:"怎么样才能给足男人面子"? 神回复:"露出腿上的淤青啊".] 课程介绍 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工 ...

  9. 设计模式之【抽象工厂模式】

    抽象工厂模式 (Abstract Factory Pattern) 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 主要解决:主要解决接口选择的问题. 何时使用:系统的产品 ...

最新文章

  1. 开发日记-20190712 关键词 读书笔记 《Perl语言入门》Day 8
  2. hdu 5367(线段树+区间合并)
  3. 每天一道LeetCode-----给定一个矩阵,如果某个元素是0,就将所在行所在列上所有元素否置0
  4. json数据交换的例了
  5. northwind中文 for mysql_学习心得 | PHP与mysql通信的若干问题
  6. 线段树线段树的创建线段树的查询单节点更新区间更新
  7. 如何在Android上创建透明活动?
  8. Servlet 实现验证码
  9. Android驱动开发过程中常用的adb指令
  10. word“您的组织策略阻止我们为您完成此操作”解决记录
  11. Bing必应搜索引擎打开新标签默认页的修改
  12. 十问十答 | 王峰对话投资人郑刚:特斯拉穿越生死无数次 看好电动车未来
  13. Word-VBA:替换文字
  14. 使用智遥工作流,优化SAP请购流程
  15. 获取前N天/月/年的日期
  16. 从爬虫构建数据集到CNN模型的验证码识别,一步一步搭建基于Python的PC个人端12306抢票程序
  17. poi-util 加强 POI 相关操作工具包
  18. new URL(“www.jjj.com“)
  19. 域名证书是SSL证书吗?域名证书和SSL证书有啥区别?
  20. Java如何学才能快速入门(零基础入门)

热门文章

  1. spring4.0之三:@RestController
  2. 高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案
  3. ASP.NET Core 发布至Linux生产环境 Ubuntu 系统
  4. 探索ArrayList自动改变size真相
  5. Maven把一个Application转换成WebProject
  6. C#导出Excel总结
  7. apache站点优化——长连接
  8. cp linux 显示进度条_Unix/Linux/Mac os下 文件互传
  9. 基于消息队列 RocketMQ 的大型分布式应用上云最佳实践
  10. 基于实时计算Flink版的场景解决方案demo