文档章节

【创建型】- 抽象工厂模式

ZeroneLove
 ZeroneLove
发布于 02/19 22:50
字数 527
阅读 7
收藏 0

抽象工厂


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

角色


  • 抽象工厂角色:定义创建具体产品的方法

  • 具体工厂角色:执行生成具体产品的方法,生成一个具体的产品

  • 抽象产品:声明1种产品接口

  • 具体产品:定义具体工厂生成的具体产品的对象,实现产品接口

  • 客户角色:使用抽象产品和抽象工程声称对象


抽象工厂角色:AbstractFactory

public abstract class AbstractFactory {

	/**
	 * 定义工厂的通用方法
	 * @return
	 */
	public abstract AbstractProduct createProduct();
}

抽象产品:AbstractProduct

public abstract class AbstractProduct {
 
	/**
	 * 定义产品的通用方法
	 */
	public abstract void show();
}

具体工厂:ConcreteFactory

public class ConcreteFactory extends AbstractFactory {

	@Override
	public AbstractProduct createProduct() {
		 return new ConcreteProduct();
	}
}

具体产品:ConcreteProduct

public class ConcreteProduct extends AbstractProduct{

	@Override
	public void show() {
		System.out.println("I am a ConcreteProduct!");
	}
}

测试代码:

AbstractFactory abf=new ConcreteFactory();  //多态:创建实际的具体工厂
AbstractProduct ap=abf.createProduct();     //具体工厂生产具体产品
ap.show();                                 //产品方法

抽象工厂设计模式分析:

抽象工厂设计模式通过设计抽象工厂类/接口和抽象产品类/接口,将工厂生产产品的具体流程剥离出来,相当于定义一个工厂和产品的规范,后续如果想对工厂和产品进行扩展,只需要创建新的工厂和产品类,并实现对应的接口,这样不需要修改原有代码的情况下,通过原有的抽象工厂的接口实现对新工厂和新产品的访问处理,这解决了简单工厂遗留的工厂/产品扩展性的问题。

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计模式之抽象工厂模式(创建型)

模式定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 模式角色 抽象...

smileNicky
01/01
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
Java经典设计模式-结构型模式-适配器模式(Adapter)

适配器模式 适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的...

Idea
2018/01/20
109
0
炒冷饭系列:设计模式 抽象工厂模式

炒冷饭系列:设计模式 抽象工厂模式 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 亲爱我,孝何难;亲恶我,孝方贤。 一、什么是抽象工厂模...

泥沙砖瓦浆木匠
2014/07/24
139
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
280
2

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
406
13
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
19
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
12
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部