当前位置: 首页 > news >正文

设计模式-工厂设计模式

核心思想

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

在这里插入图片描述

优缺点

优点

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

缺点

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

代码示例

产品抽象接口

/*** 支付类*/
public interface Pay {/*** 统一下单*/void unifiedorder();
}

抽象工厂


/*** 抽象工厂*/
public interface IFactory {/*** 获取支付类* @return*/Pay getPay();
}

产品具体实现类

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

工厂具体实现类

/****/
public class AliFactory implements IFactory{/*** 获取支付类* @return*/@Overridepublic Pay getPay(){return new AliPay();}
}
/****/
public class WechatFactory implements IFactory{/*** 获取支付类* @return*/@Overridepublic 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.lryc.cn/news/137689.html

相关文章:

  • TM4C123库函数学习(3)---串口中断
  • opencv 进阶13-Fisherfaces 人脸识别-函数cv2.face.FisherFaceRecognizer_create()
  • 基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)
  • LeetCodeHot100python版本:单调栈,栈,队列,堆
  • JUC初识
  • stm32之5.长按按键(使用时钟源)调整跑马灯速度
  • element ui datePick时间日期一段时间,限制选择日期的范围
  • kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中
  • 高性能MySQL实战(三):性能优化
  • 198. 打家劫舍
  • Pydev·离线git包
  • Vue-12.集成postcss.config.js
  • 基于前端技术原生HTML、JS、CSS 电子病历编辑器源码
  • Linux环境下远程访问SVN服务:SVN内网穿透的详细配置与操作指南
  • 创建k8s operator
  • python模拟登入某平台+破解验证码
  • 【图像分割】理论篇(2)经典图像分割网络基于vgg16的Unet
  • vue插入重复的html内容
  • 计算机网络-物理层(三)-信道的极限容量
  • Http/Websocket协议的长连接和短连接的错误认识详细解读(史上最通俗)
  • 两两交换链表中的节点
  • HTTP与RPC的取舍
  • 微前端学习(上)
  • 【Axure视频教程】标签版多选下拉列表
  • Sharepoint2013必备软件安装路径
  • C++day4(关系运算符的重载)
  • 农业水价综合改革系统主要组成
  • 使用批处理文件(.bat)启动多个CMD窗口并执行命令
  • 开源项目-会议室预约管理系统
  • Flask路由注册route的几种方式