转自:http://book.codedq.net/design-pattern/AbstractFactory.html

AbstractFactory抽象工厂


概述



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

适用性


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


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


    例子


    AbstractFactory

    public interface IAnimalFactory {ICat createCat();IDog createDog();
    }

    ConcreteFactory

    public class BlackAnimalFactory implements IAnimalFactory {public ICat createCat() {return new BlackCat();}public IDog createDog() {return new BlackDog();}
    }public class WhiteAnimalFactory implements IAnimalFactory {public ICat createCat() {return new WhiteCat();}public IDog createDog() {return new WhiteDog();}
    }

    AbstractProduct

    public interface ICat {void eat();
    }public interface IDog {void eat();
    }

    ConcreteProduct

    public class BlackCat implements ICat {public void eat() {System.out.println("The black cat is eating!");}
    }
    public class WhiteCat implements ICat {public void eat() {System.out.println("The white cat is eating!");}
    }
    public class BlackDog implements IDog {public void eat() {System.out.println("The black dog is eating");}
    }
    public class WhiteDog implements IDog {public void eat() {System.out.println("The white dog is eating!");}
    }

    ClientTest

    public static void main(String[] args) {IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();ICat blackCat = blackAnimalFactory.createCat();blackCat.eat();IDog blackDog = blackAnimalFactory.createDog();blackDog.eat();IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();ICat whiteCat = whiteAnimalFactory.createCat();whiteCat.eat();IDog whiteDog = whiteAnimalFactory.createDog();whiteDog.eat();
    }

    结果

    The black cat is eating!
    The black dog is eating!
    The white cat is eating!
    The white dog is eating!

    创建型模式

    • 抽象工厂
    • 工厂方法
    • 单例模式
    • 建造者模式
    • 原型模式

创建型模式之抽象工厂(AbstractFactory)相关推荐

  1. 创建型模式:抽象工厂

    个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂. 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介 ...

  2. Java设计模式学习总结(3)——创建型模式之抽象工厂模式

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

  3. 4.5_abstract_factory_创建型模式:抽象工厂模式

    创建型模式 --- 抽象工厂模式--- 内容:定义一个工厂类接口,让工厂子类来创建一系列相关或相互依赖的对象相比工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品角色:1. 抽象工厂角色 (Cr ...

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

    文章目录 创建型模式 概述 Case 场景模拟工程 模拟早期单机Redis的使用 Bad Impl Better Impl (抽象⼯⼚模式重构代码) 定义适配接⼝ 实现集群适配器接口 代理方式的抽象工 ...

  5. 设计模式之创建型模式(抽象工厂模式)

    抽象工厂模式介绍 – 将关键零件组装成产品 为创建一组相关或相互依赖的对象,而且无需指定他们的具体类. 抽象工厂的工作就是将"抽象零件"组装成"抽象产品" 我们 ...

  6. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  7. android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式

    一.介绍,定义 抽象工厂模式也是创建型模式之一,抽象工厂模式起源于对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件及其实现. 为创建一组相关或者相互依赖的对象提供接口,而不需要具体指定 ...

  8. 创建型模式-单例模式、工厂模式

    目录 创建型模式特点 创建型模式分类 1.单例模式(Singleton Pattern) 单例介绍 代码演示 ①饿汉式(静态常量) ②饿汉式(静态代码块) ③懒汉式(线程不安全) ④懒汉式(线程安全, ...

  9. 设计模式系列一创建型之(抽象工厂模式)

    1.抽象工厂简介 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作. 如何应对这种变化? 如何绕过常规的对象的创建方 ...

最新文章

  1. 第二课.PyTorch入门
  2. 按照文件名最后数字进行排序
  3. python turtle画气球-python windows下显示托盘区气球消息
  4. websphere内存溢出
  5. 路由器中的管理间距和量度参数
  6. 自定义的 ListBoxItem 自适应ListBox的宽度
  7. Rails + React +antd + Redux环境搭建
  8. 了解android应用开发的更多方面有更好的认识
  9. graphic头文件函数_graphics.h头文件
  10. scrap连接django
  11. SDUT 1291数据结构上机测试4.1:二叉树的遍历与应用1
  12. 实现销售榜单下载功能
  13. 《Java 8 in Action》Chapter 12:新的日期和时间API
  14. cefsharp设置cookie_CefSharp 设置cookie
  15. 数据预处理(数据审核、缺失值处理、标准化正则化、降维等)
  16. Windows7旗舰版SP1_64位2018.10(装机版)
  17. r语言查找是否存在空值_R语言读取数据空值
  18. 情感天地——《不能牵手就握手吧》
  19. mysql 表的结果作为表_SQL--如何将Sql语句查询出来的结果作为一个表名 再次进行查询...
  20. 大牛deep learning集合

热门文章

  1. win7安装解压版mysql_win7安装解压缩版mysql 5.7.19和卸载后重新安装
  2. 什么是Java的灵魂?了解JVM的结构模型,生命周期,Java王朝虚拟机的更替,各家大厂虚拟机百花齐放
  3. 随笔-springBoot配置全局跨域
  4. armbian linux装AdGuard Home 广告拦截反追踪
  5. 微商大咖不轻易透露的操作秘诀
  6. CleanMyMac X 4.10.1许可证 Mac系统清洁加速
  7. maven 项目 springMVC实现文件图片的上传下载功能详解(源码已提供,小白必看)
  8. kafka send方法详解 (同步异步) 小白使用记录
  9. JAVA时间日期处理类,主要用来遍历两个日期之间的每一天
  10. centos 7 安装极点五笔中文输入法