设计模式-工厂设计模式

news2024/9/28 7:19:58

核心思想

  • 在简单工厂模式的基础上进一步的抽象化
  • 具备更多的可扩展和复用性,增强代码的可读性
  • 使添加产品不需要修改原来的代码,满足开闭原则

在这里插入图片描述

优缺点

优点

  • 符合单一职责,每个工厂只负责生产对应的产品
  • 符合开闭原则,添加产品只需添加对应的产品类和工厂类
  • 使用者只需要知道产品抽象类,不需要关心其它实现类。满足迪米特法则依赖倒置原则里氏替换原则

缺点

  • 添加一个产品,需要实现对应的工厂类和产品类
  • 每个产品需要有对应的产品类和工厂类

代码示例

产品抽象接口

/**
 * 支付类
 */
public interface Pay {

    /**
     * 统一下单
     */
    void unifiedorder();
}

抽象工厂


/**
 * 抽象工厂
 */
public interface IFactory {

    /**
     * 获取支付类
     * @return
     */
    Pay getPay();
}

产品具体实现类

public class AliPay implements Pay{
    @Override
    public void unifiedorder() {
        System.out.println("支付宝 支付统一下单");
    }
}
public class WechatPay implements Pay{
    @Override
    public void unifiedorder() {
        System.out.println("微信 支付统一下单");
    }
}

工厂具体实现类

/**
 *
 */
public class AliFactory implements IFactory{

    /**
     * 获取支付类
     * @return
     */
    @Override
    public Pay getPay(){
        return new AliPay();
    }
}

/**
 *
 */
public class WechatFactory implements IFactory{

    /**
     * 获取支付类
     * @return
     */
    @Override
    public Pay getPay(){
        return new WechatPay();
    }
}

测试


public class AppRun {
    public static void main(String[] args) {
        IFactory iFactory = new AliFactory();
        Pay pay = iFactory.getPay();

        //获取支付
        pay.unifiedorder();

    }
}

在这里插入图片描述

public class AppRun {
    public static void main(String[] args) {
        IFactory iFactory = new WechatFactory();
        Pay pay = iFactory.getPay();

        //获取支付
        pay.unifiedorder();

    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

骨传导耳机品牌推荐,精选十大骨传导耳机品牌推荐

随着手机作为大众日常生活不可分割的一部分,使用耳机也成为了许多人的日常。相较于有线耳机,有越来越多的人愿意去选择无线耳机,骨传导耳机的受众也进一步提高了,那么面对市面上眼花缭乱的品牌,该如何选择呢&#xff1…

怎样清理电脑内存?分享4个快速清理方法!

“求救求救!电脑总是没内存怎么办啊?明明没有存很多东西啊,电脑容量也很大,总是没内存真的很影响心情哎!有什么方法可以解决这个问题吗?” 电脑内存的清理是维护系统性能的重要步骤之一。如果电脑内存不足&…

Powered by Paraverse | 平行云助力彼真科技打造演出“新物种”

01 怎么看待虚拟演出 彼真科技 我们怎么看待虚拟演出? 虚拟演出给音乐人或者音乐行业带来了哪些新的机会?通过呈现一场高标准的虚拟演出,我们的能力延伸点在哪里? 先说一下我们认知里的虚拟演出的本质: 音乐演出是一…

一天赚四五十的副业,可以试试这几种

大家都希望能够有额外的零花钱,尤其是对于学生和不收入稳定的人来说。今天,我将分享一些简单实用的赚钱技巧,帮助你每天赚取四五十的零花钱,让你的钱包更丰盈。 第一种:蚂蚁路客和友活来了 支付宝旗下两款接任务拍门…

消息队列——RabbitMQ(一)

MQ的相关概念 什么事mq MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中&#xff…

智汇云舟携三大系列产品亮相第68届中国安防工程商集成商大会

8月18日,由中国安全防范产品行业协会指导,永泰传媒主办的中国安防工程商(系统集成商)大会暨第68届中国安防新产品、新技术成果展示在广州盛大开幕。 来自华南各省、市安防协(学)会及全国安防工程商、系统集…

使用本地电脑搭建可以远程访问的SFTP服务器

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3. 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#x…

C++系列-浅拷贝和深拷贝

浅拷贝和深拷贝 浅拷贝深拷贝 如果属性有在堆区开辟内存的,一定要自己提供拷贝构造函数,进行深拷贝,以免堆区内存重复释放。 浅拷贝 浅拷贝会带来的问题是堆区空间重复释放 因为是浅拷贝,在调用第二个对象的析构函数时&#xff0…

React前端开发架构:构建现代响应式用户界面

在当今的Web应用开发中,React已经成为最受欢迎的前端框架之一。它的出色性能、灵活性和组件化开发模式,使得它成为构建现代响应式用户界面的理想选择。在这篇文章中,我们将探讨React前端开发架构的核心概念和最佳实践,以帮助您构建…

Googel Earth Engine 配置Python 环境

1. 安装并配置python环境 此处不再赘述 2. 安装 earthengine-api pip install earthengine-api C:\Users\xixi>pip install earthengine-api Collecting earthengine-apiUsing cached earthengine_api-0.1.363-py3-none-any.whl Requirement already satisfied: google-c…

验证评估守护关基安全 赛宁数字孪生靶场创新实践

​​近日,由赛宁网安主办,ISC互联网安全大会组委会协办的第十一届互联网安全大会(ISC 2023)安全运营实践论坛圆满结束。赛宁网安产品总监史崯出席并作出主题演讲:《基于数字孪生靶场如何开展验证评估》,同时…

Tinderbox 8 for mac介绍安装

Tinderbox 8是一款适用于Mac系统的可视化个人笔记工具,可以帮助您以地图形式存储笔记,生成时间轴,并在完成后将它们作为HTML文件共享。现在Tinderbox可以编写脚本,让Tinderbox与您的所有其他工具更紧密地协作 笔记工具 Tinderbox存…

Centos7卸载|安装JDK1.8|Xshell7批量控制多个终端

一: 使用yum安装的好处是较为方便|环境变量自动配置完成。 1.1: 执行下面的命令,检查是否已安装了jdk # 查看当前是否安装了JDK, [rootwww ~]# rpm -qa |grep java [rootwww ~]# rpm -qa |grep jdk [rootwww ~]# rpm -qa |grep gcj [rootwww ~]# rpm -qa | grep -…

【AWS】创建IAM用户;无法登录IAM用户怎么办?错误提示:您的身份验证信息错误,请重试(已解决)

目录 0.背景问题分析 1.解决步骤 0.背景问题分析 windows 11 ,64位 我的问题情景: 首先我创建了aws的账户,并且可以用ROOT用户登录,但是在登录时选择IAM用户,输入ROOT的名字和密码,就会提示【您的身份验证…

安科瑞微机保护装置、智能操控及无线测温产品等电力监控解决方案在山东凯瑞英医药中间体产业链项目的应用

安科瑞 华楠 摘 要:在变电站电力系统中,输电线路是最重要的部分,因此,对输电线路的保护对于整个电力系统的稳定运行有非常重要的意义。继电保护装置是一种反映电力系统故障和不正常运行状态,并且作用于断路器跳闸和发出告警信号的设备,其启到保证电力系…

【openfeign】OpenFeign的使用、GET请求和POST请求

RPC全称是Remote Procedure Call,即远程过程调用,其对应的是我们的本地调用。 RPC的目的是:让我们调用远程方法像调用本地方法一样。 //本地调用 R result orderService.findOrderByUserId(id); //RPC远程调用 orderService为代理对象 R …

蓝牙Mesh设备配网过程及抓包分析

配网过程 说明Mesh消息类型配网过程 信标阶段(Beaconing)Unprovisioned Device beaconLink Open/Link ACK/Link CloseLink OpenLink ACKLink Close 邀请阶段(Invitation)Provisioning InviteProvisioning Capabilities 交换公钥阶段(Exchanging public keys)Provisioning Start…

Oracle数据库经纬度坐标查询优化与结果错误原因分析、SQL中WKT超长文本字符串处理

文章目录 一、Oracle几何空间数据对象和其他数据库的差异二、Oracle查询一个经纬度坐标是否在边界内部2.1 查询条件2.2 查询结果错误,似乎是仅做了MBR匹配2.3 错误原因2.4 解决办法 三、SQL中WKT超长文本在Oracle中如何编写3.1 Oracle中执行含超长文本的SQL报错3.2 …

健身耳机哪个牌子好?推荐几款最适合健身运动用的耳机牌子

对于健身爱好者来说,选择一款适合健身运动的耳机是至关重要的,无论你是跑步、举重还是瑜伽,有适合自己的耳机戴着听歌,能够让你更加投入、更加享受健身的过程。可现在如今的耳机品牌琳琅满目,在选择上自然是要花上不少…

搭建Everything+cpolar在线资料库,实现随时随地访问

Everythingcpolar搭建在线资料库,实现随时随地访问 文章目录 Everythingcpolar搭建在线资料库,实现随时随地访问前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前…