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

常用设计模式中的工厂模式,责任链模式,策略模式和单例模式的简单说明

 设计模式的六大原则:


单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

开放-封闭原则:软件实体可以拓展但是不可以修改。

依赖倒转原则:高层模块和低层模块两者都应依赖抽象;抽象不应依赖细节,细节依赖抽象。

里氏代换原则:子类型必须能够替换掉它们的父类型。

合成聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。

迪米特原则:一个对象应该对其他对象保持最少的了解。不跟陌生人说话。

1. 工厂模式(Factory Pattern)

核心思想:通过工厂类统一创建对象,隐藏对象创建的细节,让使用者无需直接调用构造函数。

解决问题

  • 避免对象创建逻辑(如复杂初始化、依赖处理)分散在代码中,便于维护。
  • 当需要更换对象类型时,只需修改工厂,无需改动所有使用处。

示例

// 产品接口
interface Car {void drive();
}// 具体产品
class Benz implements Car {@Override public void drive() { System.out.println("驾驶奔驰"); }
}class BMW implements Car {@Override public void drive() { System.out.println("驾驶宝马"); }
}// 工厂类
class CarFactory {// 根据类型创建对象public static Car createCar(String type) {if ("benz".equals(type)) return new Benz();if ("bmw".equals(type)) return new BMW();return null;}
}// 使用:无需直接new,通过工厂获取
Car car = CarFactory.createCar("benz");
car.drive();

2. 责任链模式(Chain of Responsibility Pattern)

核心思想:将多个处理者组成一条链,请求沿链传递,直到某个处理者能处理为止。

解决问题

  • 避免请求发送者与多个处理者直接耦合(如请假审批:员工→组长→经理→总监,无需员工知道具体审批人)。
  • 灵活调整处理者顺序或增减处理者。

示例

// 处理者接口
abstract class Approver {protected Approver next; // 下一个处理者public Approver(Approver next) { this.next = next; }abstract void approve(int days);
}// 具体处理者
class TeamLeader extends Approver {public TeamLeader(Approver next) { super(next); }@Override void approve(int days) {if (days <= 3) System.out.println("组长批准");else next.approve(days); // 无法处理,交给下一个}
}class Manager extends Approver {public Manager(Approver next) { super(next); }@Override void approve(int days) {if (days <= 7) System.out.println("经理批准");else next.approve(days);}
}// 使用:构建责任链
Approver chain = new TeamLeader(new Manager(null));
chain.approve(5); // 经理批准

3. 策略模式(Strategy Pattern)

核心思想:定义多种算法(策略),封装成独立类,使算法可动态切换。

解决问题

  • 避免大量 if-else 或 switch 判断(如支付方式:支付宝、微信、银联,每种方式算法不同)。
  • 算法可独立扩展,不影响使用方。

示例

// 策略接口
interface PaymentStrategy {void pay(double amount);
}// 具体策略
class Alipay implements PaymentStrategy {@Override public void pay(double amount) {System.out.println("支付宝支付:" + amount);}
}class WechatPay implements PaymentStrategy {@Override public void pay(double amount) {System.out.println("微信支付:" + amount);}
}// 使用策略的类
class Order {private PaymentStrategy strategy;public Order(PaymentStrategy strategy) { this.strategy = strategy; }public void pay(double amount) { strategy.pay(amount); }
}// 使用:动态切换策略
Order order = new Order(new Alipay());
order.pay(100); // 支付宝支付
order = new Order(new WechatPay());
order.pay(200); // 微信支付

4. 单例模式(Singleton Pattern)

核心思想:保证一个类在整个系统中只有一个实例,并提供全局访问点。

解决问题

  • 避免频繁创建销毁重量级对象(如配置管理器、线程池),节省资源。
  • 确保全局状态一致性(如计数器、日志对象)。

示例(线程安全版): 

public class Singleton {// 私有静态实例,volatile防止指令重排private static volatile Singleton instance;// 私有构造函数,禁止外部创建private Singleton() {}// 全局访问点,双重检查锁保证线程安全public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}// 使用:全局唯一实例
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
System.out.println(obj1 == obj2); // true(同一实例)

总结

模式核心特点典型场景
工厂模式统一创建对象,隐藏创建细节复杂对象初始化、产品族创建
责任链模式请求沿处理者链传递,动态分工审批流程、过滤器链、异常处理
策略模式算法封装,动态切换支付方式、排序算法、折扣计算
单例模式全局唯一实例,节省资源配置管理、日志对象、线程池

这些模式的核心是分离变化与不变,让系统更灵活、易维护。

http://www.dtcms.com/a/393525.html

相关文章:

  • aave v3 合约解析1 存款
  • autosar中自旋锁和互斥锁的应用
  • 建筑可视化告别“假”渲染:用Photoshop+Twinmotion打造照片级场景
  • 一键生成linux服务器健康巡检html报告
  • 数据结构(C语言篇):(十八)交换排序
  • Ubuntu20.04下跑通ORB-SLAM2
  • C++二进制转十进制
  • WordPress用户系统 + JWT认证:打造统一的应用登录解决方案
  • PortSwigger靶场之将反射型 XSS 注入到带有尖括号和双引号的 JavaScript 字符串中,并使用 HTML 编码和单引号进行转义通关秘籍
  • win11电脑按键失灵,提供几个可能恢复的方法
  • Android 中获取稳定时间的方法
  • mac编译ffmpeg
  • Deepsoil V7.1.10+Shake2000,最新版程序、教学视频、PDF使用手册
  • Apollo相机数据RTMP推流与播放指南
  • 使用Python扩展Unity编辑器
  • 【Android】自定义控件
  • 探索 Event 框架 6:高级特性与性能优化
  • JavaSE基础——第九章 枚举类注解
  • 云计算在金融领域中的应用
  • 【入门算法】前缀和:先预存再求和,以空间换时间
  • mac编译vst3sdk
  • Java 网络原理(二)--- TCP的机制 + IP协议 +以太网协议 + DNS
  • Python文件名编码处理深度解析:绕过编码问题的专业指南
  • 如何利用简单的浏览器插件Web Scraper爬取知乎评论数据
  • 鹿鼎记豪侠传:Rust 重塑 iOS 江湖(下)
  • 03.博客版-镜像
  • 云原生docker离线二进制安装
  • RabbitMQ 的配置文件位置及常见配置项
  • Visual Prompt Builder-AI 提示词可视化工具
  • 一文掌握Flask:从基础使用到高级应用