抽象工厂模式

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

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

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

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

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

类图

  1. //抽象产品1
  2. public interface IProduct1 {
  3. public void show();
  4. }
  1. //抽象产品2
  2. public interface IProduct2 {
  3. public void show();
  4. }
  1. //实体产品1
  2. public class Product1 implements IProduct1 {
  3. public void show() {
  4. System.out.println("创建了1型产品");
  5. }
  6. }
  1. //实体产品2
  2. public class Product2 implements IProduct2 {
  3. public void show() {
  4. System.out.println("创建了2型产品");
  5. }
  6. }
  1. /*
  2. * 1A 1B属于Product1 同一产品等级结构中
  3. * 2A 2B属于Product2
  4. */
  5. public class GradeProduct1A extends Product1 {
  6.  
  7. @Override
  8. public void show() {
  9. super.show();
  10. System.out.println("这是产品1下的:产品A");
  11. }
  12.  
  13. }
  1. public class GradeProduct1B extends Product1 {
  2.  
  3. @Override
  4. public void show() {
  5. super.show();
  6. System.out.println("这是产品1下的:产品B");
  7. }
  8. }
  1. public class GradeProduct2A extends Product2 {
  2.  
  3. @Override
  4. public void show() {
  5. super.show();
  6. System.out.println("这是产品2下的:产品A");
  7. }
  8. }
  1. public class GradeProduct2B extends Product2 {
  2.  
  3. @Override
  4. public void show() {
  5. super.show();
  6. System.out.println("这是产品2下的:产品B");
  7. }
  8. }
  1. //抽象工厂 创建不同的抽象产品
  2. public interface IFactory {
  3. public IProduct1 createProduct1A();//1类产品 型号A
  4. public IProduct1 createProduct1B();//1类产品 型号B
  5. public IProduct2 createProduct2A();//2类产品 型号A
  6. public IProduct2 createProduct2B();//2类产品 型号B
  7. }
  1. //实体工厂 创建实体产品,返回类型为抽象产品
  2. public class Factory implements IFactory {
  3.  
  4. public IProduct1 createProduct1A() {
  5. return new GradeProduct1A();
  6. }
  7.  
  8. public IProduct1 createProduct1B() {
  9. return new GradeProduct1B();
  10. }
  11.  
  12. public IProduct2 createProduct2A() {
  13. return new GradeProduct2A();
  14. }
  15.  
  16. public IProduct2 createProduct2B() {
  17. return new GradeProduct2B();
  18. }
  19. }
  1. /*
  2. * 抽象工厂模式:用来创建一组相关或者相互依赖的对象
  3. *
  4. * 流程:抽象工厂,实体工厂 生产产品
  5. * 抽象产品。实体产品 实现产品功能
  6. * 缺点:当须要添加一个产品(由抽象和实体构成)。工厂都须要更改
  7. */
  8. public class Test4Abstract {
  9. public static void main(String[] args) {
  10. IFactory factory = new Factory();
  11. IProduct1 product1a = factory.createProduct1A();
  12. product1a.show();
  13. IProduct1 product1b = factory.createProduct1B();
  14. product1b.show();
  15.  
  16. IProduct2 product2a = factory.createProduct2A();
  17. product2a.show();
  18. IProduct2 product2b = factory.createProduct2B();
  19. product2b.show();
  20. }
  21. }

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. css3 动画 vs js 动画

    之前被问到过,css3 动画与 js 动画孰优孰劣,脑袋的第一反应就是性能上肯定 css3 动画会好很多,但别人说不对,我就在想,不对?难道还有别的原因吗?答案是肯定的.先来看看二者实现动画的原理吧. ...

  2. 利用eclipse调试JDK源码

    先看效果图 综合网上各种教程,总结如下 新建 D:/jdk/src .D:/jdk/debug 目录 src存放源码 debug存放编译结果 将 %JAVA_HOME%/src.zip 解压到 D:/ ...

  3. java设计模式之单例模式总结

    面试手写单例模式(通用版)

  4. 【译】x86程序员手册28-7.7任务地址空间

    7.7 Task Address Space 任务地址空间 The LDT selector and PDBR fields of the TSS give software systems desi ...

  5. linux使用crontab实现PHP执行计划定时任务

    linux使用crontab实现PHP执行计划定时任务 前几天写过一篇文章,利用单纯的php实现定时执行任务,但是效率不佳,对于linux来说用crontab实现更加合理 首先说说cron,它是一个l ...

  6. C/C++ char*、char[]

    一.本质区别 char* s是一个保存字符串首地址的指针变量,char a[]是许多连续的内存单元,单元中的元素为char类型.之所以用char *能达到char []的效果,还是字符串的本质,即给你 ...

  7. 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet(转载)

    若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet 请将 J ...

  8. Linux学习笔记记录(四)

  9. Placing Lampposts

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=91212#problem/E #include <iostream> #inc ...

  10. codechef营养题 第二弹

    第二弾が始まる! codechef problems 第二弹 一.Backup Functions 题面 One unavoidable problem with running a restaura ...