上两篇文章中,讲述了简单工厂以及工厂方法模式,在此就不做赘述了,本篇重点讲述抽象工厂模式;

抽象工厂模式(Abstract Factory Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂模式有四种角色,分别为:抽象工厂、具体工厂、抽象产品和具体产品,抽象工厂模式的类图如下:

通过上述类图可以很清楚的观察出各个角色之间的关系,产品系列里面有AbstractProductA和AbstractProductB两种类型,工厂系列里面有AbstractFactory一种工厂类型,该工厂有两个实现类,每个实现类均可产生产品A和产品B,下面写一个小例子看一下:

抽象产品及实现类

public interface AbstractProductA {public void methodA1();public void methodA2();
}
public class ProductA1 implements AbstractProductA {@Overridepublic void methodA1() {System.out.println("产品A等级为1的methodA1()");}@Overridepublic void methodA2() {System.out.println("产品A等级为1的methodA2()");}}
public class ProductA2 implements AbstractProductA {@Overridepublic void methodA1() {System.out.println("产品A等级为2的methodA1()");}@Overridepublic void methodA2() {System.out.println("产品A等级为2的methodA1()");}}
public interface AbstractProductB {public void methodB1();public void methodB2();
}
public class ProductB1 implements AbstractProductB {@Overridepublic void methodB1() {// TODO Auto-generated method stubSystem.out.println("产品B等级为1的methodB1()");}@Overridepublic void methodB2() {System.out.println("产品B等级为1的methodB2()");}
}
public class ProductB2 implements AbstractProductB {@Overridepublic void methodB1() {// TODO Auto-generated method stubSystem.out.println("产品B等级为2的methodB1()");}@Overridepublic void methodB2() {System.out.println("产品B等级为2的methodB2()");}
}

抽象工厂及其实现类

public interface AbstractFactory {public AbstractProductA createPruductA();public AbstractProductB createPruductB();
}
public class ConcreteFactory1 implements AbstractFactory {@Overridepublic AbstractProductA createPruductA() {// TODO Auto-generated method stubreturn new ProductA1();}@Overridepublic AbstractProductB createPruductB() {// TODO Auto-generated method stubreturn new ProductB1();}
}
public class ConcreteFactory2 implements AbstractFactory {@Overridepublic AbstractProductA createPruductA() {// TODO Auto-generated method stubreturn new ProductA2();}@Overridepublic AbstractProductB createPruductB() {// TODO Auto-generated method stubreturn new ProductB2();}}

抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类,抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么,抽象工厂的任务就是定义一个负责负责创建一组产品的接口。这个接口内的每个方法创建一个具体产品,同时我们可以利用实现抽象工厂的子类提供这些具体的做法,好的,工厂模式的三种例子就介绍到这!

设计模式之不简单的工厂模式(三)相关推荐

  1. 设计模式之不简单的工厂模式(一)

    谈起设计模式中两个最简单的设计模式第一个大家想到的应该就是单例模式,第二个想必就是工厂模式了,拿我自身而言之前一直以来对工厂方法认识较浅,只觉得所谓的工厂模式就是将创建对象的过程封装到一个工厂类里面, ...

  2. 设计模式之不简单的工厂模式(二)

    在这篇博客中,将讲解工厂方法模式,需要再次强调一下凡是提到工厂模式都是用来产生对象用的,下面开始思考这么一个场景: 小张喜欢吃烤鱼,于是他走到他家附近的一家烤鱼店,跟服务员说,我要烤鲤鱼一份,然后找了 ...

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

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

  4. 设计模式(五)--工厂模式汇总

    LZ想把简单工厂模式.工厂方法模式和抽象工厂模式整理到一篇博文当中,由浅入深,应该能方便理解和记忆,话不多说,进入正题. 一.简单工厂模式 定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式, ...

  5. 23种设计模式 -----Day01:简单工厂模式

    目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...

  6. 一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)

    设计模式 使用设计模式,可以让我们的代码具有更好的可读性.可扩展性.可读性.重用性.符合高内聚低耦合的特点.作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识. 设计模式种类 该 ...

  7. 【23种设计模式专题】二 工厂模式

    程序猿学社的GitHub,欢迎Star github技术专题 本文已记录到github 文章目录 前言 小故事 传统方式 简单工厂(第一种) 工厂方法模式(第二种) 抽象工厂模式(第三种) 使用工厂方 ...

  8. 设计模式 笔记4 | 简单工厂模式 在源码中的应用 | Calendar 日历 | 源码浅析 | 使用总结 | 建造者模式

    文章目录 一.Calendar 日历类 1.1 内部属性 1.2 设置时间属性值 1.3 获取时间属性 1.4 使用 Calander 计算时间 二.Calender 类中的设计模式 2.1 简单工厂 ...

  9. JAVA设计模式之3种工厂模式

    转自 JAVA设计模式之3种工厂模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离.为了使软件的结构更加清晰,外 ...

最新文章

  1. Lync 小技巧-46-intranet-共享桌面-internet-网络问题
  2. C语言--const修饰指针解析
  3. PreparedStatement批量处理的一个Framework(原创)
  4. [TJOI2011] 卡片(网络流 + 质因子优化建图)
  5. netty 发送 http请求
  6. Java实现websocket
  7. Spring Setting
  8. win10安装solidworks 注册机闪退的问题,转自知乎
  9. 修改虚拟机名称和主机名称
  10. win10系统下计算器界面变成英文的解决方法
  11. ROS资料----工业机器人 ROS-I Kinetic 培训课程
  12. 使用word写论文必备技巧(设置目录,目录导航)
  13. 【漏洞复现】CVE-2020-0796永恒之黑漏洞复现
  14. mysql 指定ip段 掩码_网络ip段划分子网掩码
  15. [高项]关键路径法VS关键链法
  16. Android 仿钉钉、微信 群聊组合头像
  17. CentOS系统的安装
  18. free -h 详解
  19. 浅析人工智能,大数据
  20. a标签里面title的使用

热门文章

  1. poj1236 Tarjan算法模板 详解
  2. BZOJ3833 : [Poi2014]Solar lamps
  3. poj 3411 Paid Roads (dfs)
  4. Windows 应用
  5. css3实现背景渐变的方法
  6. 判断数组中是否有存在重复值
  7. C++数据结构——array、vector、链表
  8. 车牌识别EasyPR(4)——字符识别MSER
  9. 找到符合条件的索引_程序员写了多年CRUD,总结出数据库索引这几点值得注意...
  10. 获取mysql 时钟,员工时钟的MySQL数据库结构