[设计模式-创建型]抽象工厂(Abstract Factory)
概括
名称 |
Abstract Factory |
结构 |
![]() |
动机 |
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 |
适用性 |
|
解析
形象比喻:
ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory
工厂模式:
客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
1.AbstractFactory
声明一个创建抽象产品对象的操作接口。
2.ConcreteFactory
实现创建具体产品对象的操作。
3.AbstractProduct
为一类产品对象声明一个接口。
4.ConcreteProduct
定义一个将被相应的具体工厂创建的产品*象。
实现abstractProduct接口。
5.Client
仅使用由AbstractFactory和AbstractProduct类声明的接口
实例
涉及的文件有
IFactory.java
- ProductFactory.java
IProduct.java
- SoftwareProduct.java
- HardwareProduct.java
TestMain.java
都是同一从ProductFactory中获取SoftwareProduct和HardwareProduct的实例。
/** * @author oscar999 * @date 2013-7-17* @version V1.0 */
package designptn.abstracfac;public interface IFactory {IProduct createSoftProduct();IProduct createHardProduct();
}
/**
* @author oscar999
* @date 2013-7-17
* @version V1.0
*/
package designptn.abstracfac;public class ProductFactory implements IFactory {@Overridepublic IProduct createSoftProduct() {// TODO Auto-generated method stubreturn new SoftwareProduct();}@Overridepublic IProduct createHardProduct() {// TODO Auto-generated method stubreturn new HardwareProduct();}}
/** * @author oscar999 * @date 2013-7-17* @version V1.0 */
package designptn.abstracfac;public interface IProduct {void product();
}
/** * @author oscar999 * @date 2013-7-17* @version V1.0 */
package designptn.abstracfac;public class SoftwareProduct implements IProduct {@Overridepublic void product() {// TODO Auto-generated method stubSystem.out.println("Product a Software");}}
/**
* @author oscar999
* @date 2013-7-17
* @version V1.0
*/
package designptn.abstracfac;public class HardwareProduct implements IProduct {@Overridepublic void product() {// TODO Auto-generated method stubSystem.out.println("Product a Hardware");}}
/** * @author oscar999 * @date 2013-7-17* @version V1.0 */
package designptn.abstracfac;public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubIFactory factory = new ProductFactory();IProduct softProduct = factory.createSoftProduct();IProduct hardProduct = factory.createHardProduct();softProduct.product();hardProduct.product();}
}
与工厂方法的区别
工厂方法强调的是类的实例不再是使用new Class()的方式获取,而是通过定义一个工厂类,从工厂类的方法中获取。
而抽象工厂强调的是同一的调用接口。
[设计模式-创建型]抽象工厂(Abstract Factory)相关推荐
- 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。
设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...
- 设计模式学习笔记——抽象工厂(Abstract Factory)模式
设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...
- 《研磨设计模式》chap7 抽象工厂 Abstract Factory
场景:配电脑,多种CPU.主板 1. 正常编码 1.1 cpu //CPU的接口 public interface CPUApi {//示意方法,CPU具有运算的功能 public void calc ...
- 设计模式-创建型-抽象工厂
#pragma once#ifndef ABSTRACTFACTORY_H #define ABSTRACTFACTORY_H // 抽象基类AbstractProductA,代表产品A 的抽象 cl ...
- 设计模式(20):创建型-抽象工厂模式(Abstract Factory)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 设计模式-创建型模式-工厂方法模式
工程源码:c++设计模式-创建型模式-工厂方法模式https://download.csdn.net/download/qq_40788199/85541617 码云:https://gitee.co ...
- 设计模式-创建型模式-工厂模式(工厂三兄弟)
设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...
- 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...
- 设计模式--抽象工厂(Abstract Factory)模式
模式定义 提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类 类图 应用场景 程序需要处理不同系列的相关产品,但是你不希望它依赖于这些产品的具体类时可以使用抽象工厂模式 优点 1.可以 ...
最新文章
- 7个提升PyTorch性能的技巧
- “完美论文”过于真实,道出了科研狗的痛
- 分数调查 HihoCoder - 1515(带权并查集)
- 将数据从 SQL Server 导入 Azure Storage Table
- sqlite3_exec
- 7-218 修理牧场 (25 分)
- python数据结构不常用的方法(哈哈,其实是常用的)
- 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题
- 1解锁方式9008_黔隆科技刷机教程金立E7忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
- GBK 汉字内码扩展规范编码表
- 使用PyHive操作Hive
- win10user文件夹迁移_Win10转移系统盘用户文件到非系统盘的详细步骤
- word2007工具栏隐藏了怎样能一直显示?
- Java邮件发送(实名发送和匿名发送)
- 24券创始人杜一楠的失败检讨书:24券是如何毁在我手上的?[转]
- linux发送邮件mail详解
- read/write函数
- Eclipse中各种编码格式及设置
- 如何在Mac上安全的下载BT
- 汽车之家精选论坛图片下载