【Java设计模式】简单学抽象工厂模式——你好,微信还是支付宝
目录
说明
实现方式
自问自答
其他链接
说明
- 五大创建型模式之一,其他还有单例模式、原型模式、建造者模式、工厂模式。
- 抽象工厂模式(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设计模式】简单学抽象工厂模式——你好,微信还是支付宝相关推荐
- java设计模式六(抽象工厂模式)
java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...
- 【四】Java设计模式GOF23之抽象工厂模式
目录 CarFactory.java public interface CarFactory {Engine createEngine();Seat createSeat();Tyre createT ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- JAVA设计模式之3种工厂模式
转自 JAVA设计模式之3种工厂模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离.为了使软件的结构更加清晰,外 ...
- 设计模式C#描述——抽象工厂模式
设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...
- 设计模式二、抽象工厂模式
设计模式part2 1. 抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...
- JavaScript 23 种设计模式之 4 抽象工厂模式
JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...
- java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式
抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...
- Java描述设计模式(04):抽象工厂模式
一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 抽象工厂模式:定义了一个in ...
最新文章
- 【转】Eclipse的Debug调试技巧大全
- IOS疯狂基础之UIImage
- 如何在SAP Cloud Platform上进行第一个integration flow开发
- 阿里笔试-二叉树由前序遍历和中序遍历推导后序遍历
- oracle自定义长度异常,Oracle 自定义wmsys.wm_concat 避免长度限制
- USB杀手上Indigogo众筹 可以毁坏电脑USB接口
- VMware下Hadoop 2.4.1完全分布式集群平台安装与设置
- 【Gym-10167】Is-A,Has-A, Who Knowz-A【图的连通性】
- origin画图初步入门
- C++17新属性详解
- 微博视频怎么下载?微博视频下载和保存工具
- Kernel同步机制的底层实现
- 水晶报表 小代码大作用【BY 阿泰】
- 性能优化之mysql优化_性能优化之MySQL优化
- [RK3288][Android5.1] 调试笔记 --- 根据VIDPID读取不同的rilLib以实现4G模块的适配
- untiy的http请求
- 白杨SEO:从百度一下到抖音搜索关键词进行查找信息,挖掘用户需求的新机会你知道吗?
- 我所理解的 iOS 并发编程
- 电脑上照片如何压缩大小?怎么把照片在线压缩?
- 企业的应用架构演变之路