目录

说明

实现方式

自问自答

其他链接


说明

  • 五大创建型模式之一,其他还有单例模式、原型模式、建造者模式、工厂模式。
  • 抽象工厂模式(Abstract Factory Pattern):定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类
  • 抽象工厂模式可以将简单工厂模式工厂方法模式进行整合。
  • 将工厂抽象成两层,AbsFactory(抽象工厂) 和 具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。

实现方式

还还还是我们的支付宝和微信,这次需要付款码和收款码。那么如何用抽象工厂模式来实现呢?UML类图以及代码:

/*** 抽象工厂模式(一个工厂可以生产一个产品家族的多种产品,需要能支持多个工厂生产各自产品家族的产品)** @author ZRH* @version 1.0.0* @date 2020/7/27*/
public class AbstractFactoryTest {public static void main(String[] args) {AbstractApp app = new AliPay();app.generateCollectionQrCode().showQrCode();app.generatePaymentQrCode().showQrCode();//app = new WeChat();app.generateCollectionQrCode().showQrCode();app.generatePaymentQrCode().showQrCode();}}/*** 一款支付的app(抽象工厂),需要既能生成收款码,又能生成付款码* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:11*/
abstract class AbstractApp {/*** 生成收款码* <p>** @return AbstractQrCode* @author : ZRH* @version : 1.0.0* @date : 2020-07-21*/public abstract AbstractQrCode generateCollectionQrCode();/*** 生成付款码* <p>** @return AbstractQrCode* @author : ZRH* @version : 1.0.0* @date : 2020-07-21*/public abstract AbstractQrCode generatePaymentQrCode();}/*** 支付宝app*/
class AliPay extends AbstractApp {/*** 生成支付宝收款码** @return AbstractQrCode*/@Overridepublic AbstractQrCode generateCollectionQrCode() {return new AliCollectionQrCode();}/*** 生成支付宝付款码** @return AbstractQrCode*/@Overridepublic AbstractQrCode generatePaymentQrCode() {return new AliPaymentQrCode();}
}/*** 微信app*/
class WeChat extends AbstractApp {/*** 生成微信收款码* <p>** @return AbstractQrCode* @author : ZRH* @version : 1.0.0* @date : 2020-07-21*/@Overridepublic AbstractQrCode generateCollectionQrCode() {return new WeChatCollectionQrCode();}/*** 生成微信付款码* <p>** @return AbstractQrCode* @author : ZRH* @version : 1.0.0* @date : 2020-07-21*/@Overridepublic AbstractQrCode generatePaymentQrCode() {return new WeChatPaymentQrCode();}
}/*** 二维码(产品族类)* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:13*/
abstract class AbstractQrCode {/*** 显示二维码*/public abstract void showQrCode();
}/*** 收款码* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:25*/
abstract class CollectionQrCode extends AbstractQrCode {
}/*** 支付宝收款码* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:26*/
class AliCollectionQrCode extends CollectionQrCode {@Overridepublic void showQrCode() {System.out.println("支付宝收款码");}
}/*** 微信收款码* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:26*/
class WeChatCollectionQrCode extends CollectionQrCode {@Overridepublic void showQrCode() {System.out.println("微信收款码");}
}/*** 付款码* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:25*/abstract class PaymentQrCode extends AbstractQrCode {
}/*** 支付宝付款码* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:27*/
class AliPaymentQrCode extends PaymentQrCode {@Overridepublic void showQrCode() {System.out.println("支付宝付款码");}
}/*** 微信付款码* <p>** @author ZRH* @version 1.0.0* @date 2020/7/20 17:27*/
class WeChatPaymentQrCode extends PaymentQrCode {@Overridepublic void showQrCode() {System.out.println("微信付款码");}
}

这样就让工厂类既能生成付款码,又能生成收款码。


自问自答

问题:为什么要用工厂,不直接new?
回答:
1. 职责单一。总不能入口就new这个产品,new那个产品。
2. 可重复性。要是new这个产品过程复杂,比如需要设置初始化参数呀什么鬼的,直接放工厂类可重复调用。
3. 可维护性。后期逻辑要改生成产品的过程,我难道要到入口类一行行找生产产品的地方?直接工厂类改。
4. 开放封闭。入口类直接调用,管你怎么实现。

其他链接

【Java设计模式】简单学工厂模式

【Java设计模式】简单学抽象工厂模式

【Java设计模式】简单学建造者模式

【Java设计模式】简单学单例模式

【Java设计模式】简单学原型模式

【Java设计模式】简单学抽象工厂模式——你好,微信还是支付宝相关推荐

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

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

  2. 【四】Java设计模式GOF23之抽象工厂模式

    目录 CarFactory.java public interface CarFactory {Engine createEngine();Seat createSeat();Tyre createT ...

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

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

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

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

  5. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  6. 设计模式二、抽象工厂模式

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

  7. JavaScript 23 种设计模式之 4 抽象工厂模式

    JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...

  8. java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式

    抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...

  9. Java描述设计模式(04):抽象工厂模式

    一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 抽象工厂模式:定义了一个in ...

最新文章

  1. 【转】Eclipse的Debug调试技巧大全
  2. IOS疯狂基础之UIImage
  3. 如何在SAP Cloud Platform上进行第一个integration flow开发
  4. 阿里笔试-二叉树由前序遍历和中序遍历推导后序遍历
  5. oracle自定义长度异常,Oracle 自定义wmsys.wm_concat 避免长度限制
  6. USB杀手上Indigogo众筹 可以毁坏电脑USB接口
  7. VMware下Hadoop 2.4.1完全分布式集群平台安装与设置
  8. 【Gym-10167】Is-A,Has-A, Who Knowz-A【图的连通性】
  9. origin画图初步入门
  10. C++17新属性详解
  11. 微博视频怎么下载?微博视频下载和保存工具
  12. Kernel同步机制的底层实现
  13. 水晶报表 小代码大作用【BY 阿泰】
  14. 性能优化之mysql优化_性能优化之MySQL优化
  15. [RK3288][Android5.1] 调试笔记 --- 根据VIDPID读取不同的rilLib以实现4G模块的适配
  16. untiy的http请求
  17. 白杨SEO:从百度一下到抖音搜索关键词进行查找信息,挖掘用户需求的新机会你知道吗?
  18. 我所理解的 iOS 并发编程
  19. 电脑上照片如何压缩大小?怎么把照片在线压缩?
  20. 企业的应用架构演变之路

热门文章

  1. JS实现雪花飘落特效效果
  2. 魔兽3的地图脚本文件简单分析图
  3. php九宫格图片合成,php实现微信中的图片合并-九宫格图片
  4. 南京大学的计算机到底怎么样?
  5. 如何修改vue的网页图标
  6. 大数据之路读书笔记-16数据应用
  7. System.Globalization 命名空间
  8. ATS667LSG:真零速、高精度齿传感器 IC
  9. 《muduo网络库》学习笔记——时间轮Timeing wheel
  10. 深入理解Java虚拟机小结