抽象工厂模式

里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品

抽象工厂:定义创建产品的抽象方法

实体工厂:详细的创建哪种产品

抽象产品:一个接口或基类

实体产品:实现详细功能,或派生

类图

//抽象产品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 实现抽象工厂模式的更多相关文章

  1. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  2. Java设计模式-抽象工厂模式(Abstract Factory )

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  3. java 之 抽象工厂模式(大话设计模式)

    看了几次抽象工厂模式,每次查看都需要重新理解一次,可能是涉及的类和接口比较多,所以比较难缕清的关系吧!在笔者看来,我们还是要吸取其思想而不是生搬硬套. 来看下类图: 大话设计模式-类图 看类图已经很乱 ...

  4. 2.java设计模式-抽象工厂模式

    抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一 ...

  5. Java设计模式-抽象工厂模式(Abstarct Factory)

    抽象工厂模式 举个生活中常见的例子,组装电脑,在组装电脑时,通常需要选择一系列的配件,比如CPU,硬盘,内存,主板,电源,机箱等,为了讨论使用简单,值考虑选择CPU和主板的问题. 事实上,在选择CPU ...

  6. Java设计模式——抽象工厂模式

    抽象工厂模式也是创建模式,可以把它理解成创建工厂的工厂,这种模式也是我们经常使用的.在抽象工厂中的接口是用来创建工厂的,每个生成的工厂又都可以按照工厂模式创建其他对象. 举例说明: 创建Shape接口 ...

  7. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  8. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  9. java设计模式(三)--抽象工厂模式

    转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...

随机推荐

  1. P1160 队列安排

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  2. ubuntu下查看服务器的CPU详细情况

    https://www.cnblogs.com/liuq/p/5623565.html 全面了解 Linux 服务器 - 1. 查看 Linux 服务器的 CPU 详细情况 ubuntu下查看服务器的 ...

  3. [Windows Server 2012] SQL Server 备份和还原方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:SQL S ...

  4. 搭建linux环境:如何在vmware安装linux虚拟机??

    本来不想再整一遍的,奈何分布式压测呀,呀呀呀呀呀呀 1.安装linux虚机 (1)在桌面上双击VMware Workstation图标后启动虚拟机,鼠标单击文件,选择新的虚拟机: (2)单击“next ...

  5. jmeter插件之PerfMon

    PerfMon是jmeter监控系统资源的一款插件,可以用来监控系统的CPU/内存/IO等性能指标. 一.要准备好的插件:JMeterPlugins-Standard-1.4.0(pwd:cjqd)或 ...

  6. 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 ...

  7. php file_get_contents函数分段读取大记事本或其它文本文件

    当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可 ...

  8. 微服务网关从零搭建——(二)搭建api网关(不带验证)

    环境准备 创建空的core2.1 api项目  演示使用名称APIGateWay  过程参考上一篇 完成后在appsettings.json 添加节点 "Setting": { & ...

  9. 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 ...

  10. ROW_NUM

    SELECT  *  FROM ( (SELECT ROW_NUMBER() OVER (PARTITION BY  字段1,字段2  ORDER BY 字段3   DESC) AS  TMPID), ...