创建型模式之抽象工厂(AbstractFactory)
转自: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)相关推荐
- 创建型模式:抽象工厂
个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂. 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介 ...
- Java设计模式学习总结(3)——创建型模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.在抽象 ...
- 4.5_abstract_factory_创建型模式:抽象工厂模式
创建型模式 --- 抽象工厂模式--- 内容:定义一个工厂类接口,让工厂子类来创建一系列相关或相互依赖的对象相比工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品角色:1. 抽象工厂角色 (Cr ...
- 设计模式 - 创建型模式_抽象工厂模式
文章目录 创建型模式 概述 Case 场景模拟工程 模拟早期单机Redis的使用 Bad Impl Better Impl (抽象⼯⼚模式重构代码) 定义适配接⼝ 实现集群适配器接口 代理方式的抽象工 ...
- 设计模式之创建型模式(抽象工厂模式)
抽象工厂模式介绍 – 将关键零件组装成产品 为创建一组相关或相互依赖的对象,而且无需指定他们的具体类. 抽象工厂的工作就是将"抽象零件"组装成"抽象产品" 我们 ...
- 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图
本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...
- android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式
一.介绍,定义 抽象工厂模式也是创建型模式之一,抽象工厂模式起源于对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件及其实现. 为创建一组相关或者相互依赖的对象提供接口,而不需要具体指定 ...
- 创建型模式-单例模式、工厂模式
目录 创建型模式特点 创建型模式分类 1.单例模式(Singleton Pattern) 单例介绍 代码演示 ①饿汉式(静态常量) ②饿汉式(静态代码块) ③懒汉式(线程不安全) ④懒汉式(线程安全, ...
- 设计模式系列一创建型之(抽象工厂模式)
1.抽象工厂简介 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作. 如何应对这种变化? 如何绕过常规的对象的创建方 ...
最新文章
- 第二课.PyTorch入门
- 按照文件名最后数字进行排序
- python turtle画气球-python windows下显示托盘区气球消息
- websphere内存溢出
- 路由器中的管理间距和量度参数
- 自定义的 ListBoxItem 自适应ListBox的宽度
- Rails + React +antd + Redux环境搭建
- 了解android应用开发的更多方面有更好的认识
- graphic头文件函数_graphics.h头文件
- scrap连接django
- SDUT 1291数据结构上机测试4.1:二叉树的遍历与应用1
- 实现销售榜单下载功能
- 《Java 8 in Action》Chapter 12:新的日期和时间API
- cefsharp设置cookie_CefSharp 设置cookie
- 数据预处理(数据审核、缺失值处理、标准化正则化、降维等)
- Windows7旗舰版SP1_64位2018.10(装机版)
- r语言查找是否存在空值_R语言读取数据空值
- 情感天地——《不能牵手就握手吧》
- mysql 表的结果作为表_SQL--如何将Sql语句查询出来的结果作为一个表名 再次进行查询...
- 大牛deep learning集合
热门文章
- win7安装解压版mysql_win7安装解压缩版mysql 5.7.19和卸载后重新安装
- 什么是Java的灵魂?了解JVM的结构模型,生命周期,Java王朝虚拟机的更替,各家大厂虚拟机百花齐放
- 随笔-springBoot配置全局跨域
- armbian linux装AdGuard Home 广告拦截反追踪
- 微商大咖不轻易透露的操作秘诀
- CleanMyMac X 4.10.1许可证 Mac系统清洁加速
- maven 项目 springMVC实现文件图片的上传下载功能详解(源码已提供,小白必看)
- kafka send方法详解 (同步异步) 小白使用记录
- JAVA时间日期处理类,主要用来遍历两个日期之间的每一天
- centos 7 安装极点五笔中文输入法