Java 实现抽象工厂模式
抽象工厂模式
里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品
抽象工厂:定义创建产品的抽象方法
实体工厂:详细的创建哪种产品
抽象产品:一个接口或基类
实体产品:实现详细功能,或派生
类图
//抽象产品1
public interface IProduct1 {
public void show();
}
//抽象产品2
public interface IProduct2 {
public void show();
}
//实体产品1
public class Product1 implements IProduct1 {
public void show() {
System.out.println("创建了1型产品");
}
}
//实体产品2
public class Product2 implements IProduct2 {
public void show() {
System.out.println("创建了2型产品");
}
}
/*
* 1A 1B属于Product1 同一产品等级结构中
* 2A 2B属于Product2
*/
public class GradeProduct1A extends Product1 { @Override
public void show() {
super.show();
System.out.println("这是产品1下的:产品A");
} }
public class GradeProduct1B extends Product1 { @Override
public void show() {
super.show();
System.out.println("这是产品1下的:产品B");
}
}
public class GradeProduct2A extends Product2 { @Override
public void show() {
super.show();
System.out.println("这是产品2下的:产品A");
}
}
public class GradeProduct2B extends Product2 { @Override
public void show() {
super.show();
System.out.println("这是产品2下的:产品B");
}
}
//抽象工厂 创建不同的抽象产品
public interface IFactory {
public IProduct1 createProduct1A();//1类产品 型号A
public IProduct1 createProduct1B();//1类产品 型号B
public IProduct2 createProduct2A();//2类产品 型号A
public IProduct2 createProduct2B();//2类产品 型号B
}
//实体工厂 创建实体产品,返回类型为抽象产品
public class Factory implements IFactory { public IProduct1 createProduct1A() {
return new GradeProduct1A();
} public IProduct1 createProduct1B() {
return new GradeProduct1B();
} public IProduct2 createProduct2A() {
return new GradeProduct2A();
} public IProduct2 createProduct2B() {
return new GradeProduct2B();
}
}
/*
* 抽象工厂模式:用来创建一组相关或者相互依赖的对象
*
* 流程:抽象工厂,实体工厂 生产产品
* 抽象产品。实体产品 实现产品功能
* 缺点:当须要添加一个产品(由抽象和实体构成)。工厂都须要更改
*/
public class Test4Abstract {
public static void main(String[] args) {
IFactory factory = new Factory();
IProduct1 product1a = factory.createProduct1A();
product1a.show();
IProduct1 product1b = factory.createProduct1B();
product1b.show(); IProduct2 product2a = factory.createProduct2A();
product2a.show();
IProduct2 product2b = factory.createProduct2B();
product2b.show();
}
}
Java 实现抽象工厂模式的更多相关文章
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- Java设计模式-抽象工厂模式(Abstract Factory )
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- java 之 抽象工厂模式(大话设计模式)
看了几次抽象工厂模式,每次查看都需要重新理解一次,可能是涉及的类和接口比较多,所以比较难缕清的关系吧!在笔者看来,我们还是要吸取其思想而不是生搬硬套. 来看下类图: 大话设计模式-类图 看类图已经很乱 ...
- 2.java设计模式-抽象工厂模式
抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一 ...
- Java设计模式-抽象工厂模式(Abstarct Factory)
抽象工厂模式 举个生活中常见的例子,组装电脑,在组装电脑时,通常需要选择一系列的配件,比如CPU,硬盘,内存,主板,电源,机箱等,为了讨论使用简单,值考虑选择CPU和主板的问题. 事实上,在选择CPU ...
- Java设计模式——抽象工厂模式
抽象工厂模式也是创建模式,可以把它理解成创建工厂的工厂,这种模式也是我们经常使用的.在抽象工厂中的接口是用来创建工厂的,每个生成的工厂又都可以按照工厂模式创建其他对象. 举例说明: 创建Shape接口 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
随机推荐
- P1160 队列安排
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...
- ubuntu下查看服务器的CPU详细情况
https://www.cnblogs.com/liuq/p/5623565.html 全面了解 Linux 服务器 - 1. 查看 Linux 服务器的 CPU 详细情况 ubuntu下查看服务器的 ...
- [Windows Server 2012] SQL Server 备份和还原方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:SQL S ...
- 搭建linux环境:如何在vmware安装linux虚拟机??
本来不想再整一遍的,奈何分布式压测呀,呀呀呀呀呀呀 1.安装linux虚机 (1)在桌面上双击VMware Workstation图标后启动虚拟机,鼠标单击文件,选择新的虚拟机: (2)单击“next ...
- jmeter插件之PerfMon
PerfMon是jmeter监控系统资源的一款插件,可以用来监控系统的CPU/内存/IO等性能指标. 一.要准备好的插件:JMeterPlugins-Standard-1.4.0(pwd:cjqd)或 ...
- CAD实现文档坐标到视区坐标的转换(com接口Delphi语言)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- php file_get_contents函数分段读取大记事本或其它文本文件
当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可 ...
- 微服务网关从零搭建——(二)搭建api网关(不带验证)
环境准备 创建空的core2.1 api项目 演示使用名称APIGateWay 过程参考上一篇 完成后在appsettings.json 添加节点 "Setting": { & ...
- Ice Cream Tower(The 2016 ACM-ICPC Asia China-Final Contest 二分&贪心)
题目: Mr. Panda likes ice cream very much especially the ice cream tower. An ice cream tower consists ...
- ROW_NUM
SELECT * FROM ( (SELECT ROW_NUMBER() OVER (PARTITION BY 字段1,字段2 ORDER BY 字段3 DESC) AS TMPID), ...