假设现在有一个车辆制造工厂,它生产两种车,A类车和B类车,每类车有其各自的车门和轮子,这就需要不同的车间来做,A类车的车间有生产车门的工作,有生产轮子的工作,B类车的车间有生产车门的工作,有生产轮子的工作,我们需要哪类车的部件时,就去哪个车间拿,拿的过程(相同的操作,抽取出来一个抽象工厂类,这里的拿就是指方法)是一样的。

下面用代码具体实现:

代码清单1:生产门(抽象产品)

public interface Door {void createDoor();
}

代码清单2:生产A门(具体产品)

public class DoorA implements Door {@Overridepublic void createDoor() {System.out.println("create door A.");}
}

代码清单3:生产B门(具体产品)

public class DoorB implements Door{@Overridepublic void createDoor() {System.out.println("create door B.");}
}

代码清单4:生产轮子(抽象产品)

public interface Wheel {void createWheel();
}

代码清单5:生产A轮子(具体产品)

public class WheelA implements Wheel {@Overridepublic void createWheel() {System.out.println("create wheel A.");}
}

代码清单6:生产B轮子(具体产品)

public class WheelB implements Wheel {@Overridepublic void createWheel() {System.out.println("create wheel B.");}
}

代码清单7:抽象工厂

public abstract class AbstractFactory {public abstract void createDoor();public abstract void createWheel();
}

代码清单8:具体A工厂

public class FactoryA extends AbstractFactory {@Overridepublic void createDoor() {new DoorA().createDoor();}@Overridepublic void createWheel() {new WheelA().createWheel();}
}

代码清单9:具体B工厂

public class FactoryB extends AbstractFactory {@Overridepublic void createDoor() {new DoorB().createDoor();}@Overridepublic void createWheel() {new WheelB().createWheel();}
}

代码清单10:测试类

public class Test {public static void main(String[] args) {new FactoryA().createDoor();new FactoryA().createWheel();new FactoryB().createDoor();new FactoryB().createWheel();}
}

输出结果:

create door A.
create wheel A.
create door B.
create wheel B.

总结:

抽象工厂模式相对于工厂方法模式来说,每个具体工厂可以生产一族产品(即多种产品);而工厂方法模式是具体工厂生产相应的具体产品,只能生产一种产品。当产品族中只有一种产品时抽象工厂模式退化成工厂方法模式。

附抽象工厂类图:

原文地址:http://men4661273.iteye.com/blog/1637880

【java设计模式系列】3. 抽象工厂模式(Abstract Factory)相关推荐

  1. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  2. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  3. 设计模式(20):创建型-抽象工厂模式(Abstract Factory)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  4. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  5. 设计模式 - 抽象工厂模式(abstract factory pattern) 详解

    抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...

  6. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  7. 抽象工厂模式 Abstract Factory Pattern

    源地址 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建 ...

  8. 抽象工厂模式-Abstract Factory Pattern

    抽象工厂模式-Abstract Factory Pattern 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽 ...

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

    java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...

  10. 设计模式之抽象工厂模式---abstract factory

    模式的介绍 模式的定义 Provide an interface for creating families of related or dependent objects without speci ...

最新文章

  1. R语言CRAN软件包Meta分析
  2. python该怎么自学-Python 应该怎么学?
  3. 让vs中网站的sln文件使用相对路径的办法
  4. 视频会议系统在企业网络中的关键利益—Vecloud微云
  5. come type6 定义_COMe-B6101龙芯3A3000 COM Express Type6模块
  6. django中的form.is_valid()总是返回False
  7. linux sigprocmask函数理解
  8. Google Talk Testing(早期版本)
  9. 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
  10. html php交互json 结果集,基于HTML模板和JSON数据的JavaScript交互(移动端)
  11. 基于NumPy实现随机梯度下降算法
  12. 昱君金融超市西祠版开通了
  13. HTML5 video autoplay=autoplay 无法自动播放的问题
  14. 【Android Tricks 6】ViewPager首页与尾页的滑动动作响应
  15. 让你的 CDN 费用省 50% 以上!图片瘦身的正确姿势
  16. java基础 —— 集合、异常、反射、io流、多线程
  17. 查询SCI期刊的英文缩写
  18. 机器学习深度学习加强学习_加强强化学习背后的科学
  19. 关于心血管疾病的治疗方法(转转)
  20. 使用SCOM 2012监控网络

热门文章

  1. 记录平常用到的ktx
  2. おまえの家(你的家)——中岛美雪
  3. 干了九年开发,我干黄了90%的项目
  4. 手把手教你做抽奖转盘(自定义alert(弹出框
  5. 一名非典型二流大学生的自述 | 我是如何从菜鸟进化到辣鸡的
  6. [ecshop ectouch调试] ectouch 调试 68ecshop ecmoban 等网站的代码 的调试
  7. 翻录cda文件_翻录电视连续剧DVD并转换为单独的H.264 MP4文件
  8. Tears - 一首钢琴曲
  9. Label Assignment
  10. 【数字图像处理】期末复习提纲