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

通俗版23种设计模式解析

通俗版23种设计模式解析

一、创建型模式(造物主的智慧)
  1. 单例模式

    • 核心:全局唯一实例(像公司CEO)
    • 场景:配置管理器、数据库连接池
    // C# 实现
    public class ConfigManager {private static ConfigManager _instance = new ConfigManager();public static ConfigManager Instance => _instance;private ConfigManager() { } // 封锁new操作
    }
    
  2. 工厂方法

    • 核心:子类决定创建哪种对象(像汽车4S店)
    • 场景:支付方式选择(支付宝/微信)
    // Java 实现
    interface Payment { void pay(); }
    class Alipay implements Payment { /*...*/ }
    class PaymentFactory {public Payment createPayment(String type) {if("alipay".equals(type)) return new Alipay();else throw new IllegalArgumentException();}
    }
    
  3. 抽象工厂

    • 核心:创建产品家族(像宜家成套家具)
    • 场景:跨平台UI组件库
    // C# 实现
    interface IButton { void Render(); }
    class WinButton : IButton { public void Render() => Console.WriteLine("Windows按钮"); }
    interface IUIFactory { IButton CreateButton(); }
    class WinFactory : IUIFactory { public IButton CreateButton() => new WinButton(); }
    
  4. 建造者

    • 核心:分步组装复杂对象(像乐高拼装)
    • 场景:构造HTTP请求
    // Java 实现
    class HttpRequest {private String method;public static class Builder {private HttpRequest request = new HttpRequest();public Builder setMethod(String m) { request.method = m; return this; }public HttpRequest build() { return request; }}
    }
    // 使用:new HttpRequest.Builder().setMethod("GET").build();
    
  5. 原型模式

    • 核心:克隆现有对象(像复印机)
    • 场景:游戏敌人复制
    // C# 实现
    class Enemy : ICloneable {public string Type { get; set; }public object Clone() => this.MemberwiseClone(); // 浅拷贝
    }
    
二、结构型模式(组装的奥秘)
  1. 适配器

    • 核心:接口转换器(像电源转接头)
    • 场景:旧日志系统兼容
    // Java 实现
    interface NewLogger { void log(String msg); }
    class LegacyLogger { void writeLog(String s) { /*...*/ } }
    class LoggerAdapter implements NewLogger {private LegacyLogger adaptee = new LegacyLogger();public void log(String msg) { adaptee.writeLog(msg); }
    }
    
  2. 桥接模式

    • 核心:抽象与实现解耦(像遥控器控制电视)
    • 场景:跨平台图形渲染
    // C# 实现
    interface IRenderer { void DrawCircle(); }
    class VectorRenderer : IRenderer { /*...*/ }
    abstract class Shape {protected IRenderer renderer;protected Shape(IRenderer r) => renderer = r;public abstract void Draw();
    }
    class Circle : Shape {public Circle(IRenderer r) : base(r) { }public override void Draw() => renderer.DrawCircle();
    }
    
  3. 组合模式

    • 核心:树形结构处理(像文件系统)
    • 场景:组织架构管理
    // Java 实现
    interface Component { void display(); }
    class Employee implements Component { public void display() { /*...*/ } }
    class Department implements Component {private List<Component> children = new ArrayList<>();public void add(Component c) { children.add(c); }public void display() { children.forEach(Component::display); }
    }
    
  4. 装饰器

    • 核心:动态添加功能(像给手机贴膜)
    • 场景:数据流加密压缩
    // C# 实现
    interface IStream { void Write(string data); }
    class FileStream : IStream { /*...*/ }
    class CryptoStream : IStream {private IStream _inner;public CryptoStream(IStream inner) => _inner = inner;public void Write(string data) {string encrypted = Encrypt(data);_inner.Write(encrypted);}
    }
    
  5. 外观模式

    • 核心:复杂系统统一入口(像酒店前台)
    • 场景:一键启动计算机
    // Java 实现
    class CPU { void start() { /*...*/ } }
    class Memory { void load() { /*...*/ } }
    class ComputerFacade {private CPU cpu = new CPU();private Memory memory = new Memory();public void boot() { cpu.start(); memory.load(); }
    }
    
三、行为型模式(协作的艺术)
  1. 观察者模式

    • 核心:状态变化通知(像微信公众号)
    • 场景:股票价格提醒
    // C# 实现
    class Stock {private List<IObserver> _observers = new List<IObserver>();public void AddObserver(IObserver o) => _observers.Add(o);public void PriceChanged() {foreach(var o in _observers) o.Update();}
    }
    
  2. 策略模式

    • 核心:算法自由切换(像出行导航策略)
    • 场景:排序算法选择
    // Java 实现
    interface SortStrategy { void sort(int[] arr); }
    class QuickSort implements SortStrategy { /*...*/ }
    class Context {private SortStrategy strategy;public void setStrategy(SortStrategy s) { strategy = s; }public void executeSort(int[] arr) { strategy.sort(arr); }
    }
    
  3. 命令模式

    • 核心:封装操作为对象(像餐厅点菜单)
    • 场景:撤销/重做功能
    // C# 实现
    interface ICommand { void Execute(); void Undo(); }
    class AddTextCommand : ICommand {private Document _doc;private string _text;public void Execute() => _doc.AddText(_text);public void Undo() => _doc.RemoveText(_text.Length);
    }
    
  4. 状态模式

    • 核心:行为随状态改变(像红绿灯)
    • 场景:订单状态流转
    // Java 实现
    interface OrderState { void cancel(); }
    class ShippedState implements OrderState {public void cancel() { System.out.println("已发货订单无法取消"); }
    }
    class Order {private OrderState state;public void setState(OrderState s) { state = s; }public void cancel() { state.cancel(); }
    }
    
四、其他关键模式
  1. 责任链:请求传递链(像审批流程)
  2. 迭代器:统一遍历方式(像遥控器换台)
  3. 中介者:集中调度(像机场控制塔)
  4. 备忘录:状态快照(像游戏存档)
  5. 访问者:动态添加操作(像税务稽查员)
  6. 模板方法:算法骨架(像咖啡制作流程)
  7. 解释器:语法解析(像SQL解析器)
  8. 享元:对象复用(像字符共享池)
  9. 代理:控制访问(像房产中介)

模式选择速查表

问题类型推荐模式
全局访问点单例模式
灵活创建对象工厂方法/抽象工厂
分步构建复杂对象建造者模式
接口不兼容适配器模式
多维度扩展桥接模式
树形结构处理组合模式
动态添加功能装饰器模式
简化复杂系统外观模式
状态驱动行为状态模式
算法自由切换策略模式
事件通知机制观察者模式
操作封装命令模式

黄金法则

  1. 优先组合而非继承
  2. 面向接口编程
  3. 高内聚低耦合
  4. 对修改关闭,对扩展开放(开闭原则)

实际案例:电商系统典型模式组合

  • 支付模块:策略模式+工厂方法
  • 订单管理:状态模式+观察者模式
  • 商品展示:装饰器模式(价格修饰)
  • 权限控制:代理模式
  • 日志系统:责任链模式+适配器模式
http://www.lryc.cn/news/611452.html

相关文章:

  • 苍穹外卖Day10
  • 智慧酒店:科技赋能下的未来住宿新体验
  • Datawhale AI夏令营 第三期 task2 稍微改进
  • 山东省天地图API申请并加载到QGIS和ArcGIS Pro中
  • 数据结构 实现单链表
  • LeetCode347.前K个高频元素(hash表+桶排序)
  • Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
  • 思途Mybatis学习 0805
  • LeetCode 刷题【31. 下一个排列】
  • 《Python基础》第3期:使用PyCharm编写Hello World
  • C++ 变量初始化方式总结 | 拷贝初始化 | 列表初始化 | 值初始化
  • 【C语言】动态内存管理详解
  • Kafka 的基本操作(1)
  • 国内办公安全平台新标杆:iOA一体化办公安全解决方案
  • 【基础】第八篇 Java 位运算符详解:从基础到实战应用
  • 【java】大数据insert的几种技术方案和优缺点
  • 一种基于机器学习的关键安全软件WCET分析方法概述与实际工作原理举例
  • 多传感器融合
  • 机器人权利:真实还是虚幻,机器人权利研究如何可能,道德权利与法律权利
  • nodejs 编程基础01-NPM包管理
  • 《计算机“十万个为什么”》之 面向对象 vs 面向过程:编程世界的积木与流水线
  • 【android bluetooth 协议分析 01】【HCI 层介绍 30】【hci_event和le_meta_event如何上报到btu层】
  • 零基础人工智能学习规划之路
  • 电路基础相关知识
  • HBM Basic(VCU128)
  • 翻译的本质:人工翻译vs机器翻译的核心差异与互补性
  • NumPy字符串与数学函数全解析:从基础到实战应用
  • 3. 为什么 0.1 + 0.2 != 0.3
  • ubuntu自动重启BUG排查指南
  • 前端遇到页面卡顿问题,如何排查和解决?