设计模式六大原则:金庸群侠传
以金庸武侠为背景总览软件设计的六大原则:单一职责、开闭、里氏替换、接口隔离、依赖倒置与迪米特法则。说明 SOLID 五原则与迪米特法则各自约束的是什么、为什么会互相牵扯,并给出每一原则的独立成篇入口。
共 32 篇文章
以金庸武侠为背景总览软件设计的六大原则:单一职责、开闭、里氏替换、接口隔离、依赖倒置与迪米特法则。说明 SOLID 五原则与迪米特法则各自约束的是什么、为什么会互相牵扯,并给出每一原则的独立成篇入口。
以张无忌的九阳神功为引,讲清依赖倒置原则:高层模块与低层模块都应依赖抽象。含数据存储的重构示例、依赖注入在前端的做法,以及测试替身与解耦的关系。
以王语嫣通晓各派武学为引,讲清接口隔离原则:客户端不该依赖它用不到的方法。含"工作和吃饭"接口的拆分示例,以及 TypeScript 中把胖接口拆成小接口的实践。
以黄药师的性格为引,讲清迪米特法则:一个对象应当对其他对象知道得尽可能少。含汽车与引擎交互的重构示例、链式调用为何容易违背该法则,以及前端组件通信中的边界。
以郭靖的成长历程为引,讲清里氏替换原则:子类对象应当能替换父类对象而不改变程序行为。含动物类继承的反例、契约式设计的判定方法,以及前端组件继承中的常见违背。
以张三丰的太极拳为引,讲清开闭原则:对扩展开放、对修改封闭。含形状扩展的重构示例、用策略与工厂消除 if-else 的做法,以及前端插件化与表单渲染中的应用。
以令狐冲的独孤九剑为引,讲清单一职责原则:一个类只承担一个变更理由。含职责拆分的判定方法、员工管理与报酬管理的重构示例,以及在前端表单校验、动画、数据请求中的落地场景。
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。这种模式使得算法的变化不影响使用算法的客户。策略模式提供了在运行时选择算法的机制,增加了系统的灵活性。
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种方法顺序访问一个聚合对象中的各个元素,而无需暴露该对象的内部表示。通过迭代器模式,可以对不同的数据结构进行遍历,而不需要了解这些数据结构的内部实现。
访问者模式(Visitor Pattern)是一种行为型设计模式,它允许你在不修改对象结构的前提下定义作用于这些对象的新操作。它通过将操作行为从对象中分离出来,放置在一个访问者(Visitor)对象中,使得行为可以动态地添加到对象结构中。这个模式特别适用于对象结构较为稳定,而行为规则频繁变化的场景。
模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态发生改变时改变其行为,对象看起来好像修改了它的类。状态模式的主要目的是使得状态转换的逻辑集中管理,通过引入状态对象,使得状态切换和行为变化变得更加可维护和扩展。
深入解析观察者模式的核心原理与实现机制,详细剖析Subject-Observer一对多依赖关系的设计思想。包含完整的JavaScript代码实现、天气预报系统实战案例和前端应用场景。讲解事件驱动编程、状态变化通知机制,以及在GUI应用、MVC架构中的最佳实践。
备忘录模式(Memento Pattern)是一种行为型设计模式,允许在不破坏封装性的前提下,捕获对象的内部状态,并在将来需要时恢复到原先的状态。主要应用于支持撤销和恢复操作的应用程序中,例如文本编辑器、游戏存档系统等。
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介者对象,来封装一系列对象之间的交互操作,从而使这些对象不再相互直接引用,降低了对象之间的耦合度。这使得一个对象的变化可以独立于其他对象的变化,更加灵活和可拓展。
解释器模式(Interpreter Pattern)是一种行为型设计模式,它提供了一种方法来定义语言的文法,并且通过解释这些语句来实现该语言的语法分析和执行。主要应用于编译器、查询语言和报告生成等场景。
命令模式(Command Pattern)是一种行为型设计模式,它将请求或操作封装成一个对象,从而使得可以用不同的请求、队列或日志来参数化其他对象。同时,它还支持可撤销的操作。
责任链模式是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求发送者与多个请求处理者耦合在一起。这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
深入解析Zustand轻量级状态管理库的核心源码实现,详细剖析其订阅发布机制、状态更新流程、中间件系统和TypeScript类型设计。通过逐行代码分析,揭示Zustand如何以极简的API设计实现高效的状态管理,对比Redux、MobX等方案的优劣,为开发者提供状态管理库选型和自定义状态管理方案的技术参考。
在软件设计中,代理模式(Proxy Pattern)是一种结构型设计模式。它为其他对象提供一种代理,并由代理对象控制对原对象的访问。代理模式常用于延迟对象的创建、控制对对象的访问以及提高系统的安全性。
享元模式是一种结构型设计模式,关注于通过共享机制来有效地支持大量细粒度对象的复用,以减少应用程序的内存使用。这种模式尤其适用于那些对象数量众多,且对象状态大部分可以外部化的场景。
在软件设计中,外观模式(Facade Pattern)是一种结构型设计模式。它为子系统中的一组接口提供了一个统一的高层接口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。通过构建一个与客户端交互的外观接口,隐藏子系统的复杂性,从而使得子系统更易于使用和维护。
在软件设计中,装饰器模式(Decorator Pattern)是一种结构型设计模式。它允许向一个现有对象添加新的功能,同时又不改变其结构。装饰器模式通过创建一个装饰类来包装原始类,从而使得原始类和装饰类可以独立变化。
在软件设计中,组合模式(Composite Pattern)是一种结构型设计模式。它的主要目的是将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。这在处理复杂的嵌套结构时尤为有用,例如文件系统、组织架构、图形处理等。
在软件设计中,桥接模式(Bridge Pattern)是一种结构性设计模式。它的主要目的是将抽象部分与实现部分分离,使它们能够独立变化。这种模式通过引入抽象层,减少了抽象与实现之间的耦合,从而实现更灵活的代码设计。
适配器模式(Adapter Pattern)是一种结构性设计模式,通过在目标接口和现有接口之间引入适配器类,将不兼容的接口转换为兼容接口,从而使得原本无法直接协作的类可以一起工作。
在软件设计中,原型模式(Prototype Pattern)是一种创建型设计模式。它的主要思想是通过复制已有的实例来创建新对象,而不是通过类构造器来创建。这种模式特别适用于对象的创建代价较高,或者需要多个几乎相同的对象时。通过原型模式,我们可以高效地创建对象,并且更灵活地管理对象的状态。
单例、工厂、抽象工厂、建造者、原型都被归为创建型模式,但它们解决的并不是同一件事。这篇不复述各自的实现,而是把"创建对象"拆成几种不同的麻烦,给出按麻烦找模式的对照表和两组最容易混的选择,并链接到各自独立成篇的详解。
在软件设计中,建造者模式(Builder Pattern)是一种创建复杂对象的设计模式。它的主要思想是将对象的构造过程分离出来,使得同样的构建过程可以创建不同的表示。
在软件设计中,工厂模式(Factory Pattern)是一种创建对象的设计模式。它的主要思想是定义一个接口或基类,通过该接口或基类让子类决定实例化哪一个具体类。工厂方法使得实例化过程延迟到子类。本文将介绍工厂模式、抽象工厂模式,并探讨它们在前端开发中的应用场景和一些典型案例。
全面解析单例模式的实现原理和应用场景,详细对比饿汉式、懒汉式、双重检查锁等多种实现方式。深入讲解JavaScript中的单例模式最佳实践,包含配置管理器、数据库连接池等实际案例。分析单例模式的优缺点、线程安全问题和现代前端开发中的应用策略。
深入解析依赖注入设计模式的核心原理和实践应用,详细阐述控制反转(IoC)概念和依赖注入的三种实现方式:构造函数注入、属性注入、接口注入。通过生动的厨师派对比喻和完整的JavaScript/TypeScript代码示例,展示如何构建高内聚、低耦合的代码架构,提升代码的可测试性、可维护性和可扩展性。