<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>工厂 on ༺KO༒NE༻</title><link>https://kone.js.cn/tags/%E5%B7%A5%E5%8E%82/</link><description>Recent content in 工厂 on ༺KO༒NE༻</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 06 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://kone.js.cn/tags/%E5%B7%A5%E5%8E%82/index.xml" rel="self" type="application/rss+xml"/><item><title>设计模式</title><link>https://kone.js.cn/p/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><guid>https://kone.js.cn/p/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</guid><description>&lt;img src="https://kone.js.cn/" alt="Featured image of post 设计模式" /&gt;&lt;h2 id="设计模式"&gt;设计模式
&lt;/h2&gt;&lt;p&gt;GOF设计模式&lt;/p&gt;
&lt;p&gt;作用：在变化和稳定中间，寻找隔离点，从而管理变化&lt;/p&gt;
&lt;p&gt;底层思维&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;语言构造&lt;/li&gt;
&lt;li&gt;编译转换&lt;/li&gt;
&lt;li&gt;内存模型&lt;/li&gt;
&lt;li&gt;运行时机制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;抽象思维&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;面向对象（封装，继承，多态）&lt;/li&gt;
&lt;li&gt;组件封装&lt;/li&gt;
&lt;li&gt;设计模式&lt;/li&gt;
&lt;li&gt;架构模式&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="如何解决复杂性变化"&gt;如何解决复杂性	“变化”
&lt;/h6&gt;&lt;p&gt;分解（分而治之）	&lt;strong&gt;抽象&lt;/strong&gt;（重用性）&lt;/p&gt;
&lt;h4 id="软件设计的目标复用"&gt;软件设计的目标：&lt;strong&gt;复用&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;​	管理变化，提高复用&lt;/p&gt;
&lt;p&gt;高内聚松耦合&lt;/p&gt;
&lt;p&gt;对象：有责任的抽象&lt;/p&gt;
&lt;h5 id="面向对象设计原则"&gt;面向对象设计原则
&lt;/h5&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;DIP：依赖倒置原则&lt;/strong&gt;(变化依赖于稳定，提出抽象类)
&lt;ul&gt;
&lt;li&gt;高层模块(稳定)和低层模块(变化)依赖于抽象(稳定)&lt;/li&gt;
&lt;li&gt;实现细节(变化)依赖于抽象&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OCP：开放封闭原则(增加优于改变)
&lt;ul&gt;
&lt;li&gt;对扩展开放，对更改封闭&lt;/li&gt;
&lt;li&gt;类模块是可扩展的，不可修改&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SRP：单一职责原则
&lt;ul&gt;
&lt;li&gt;一个类仅有一个引起它变化的原因&lt;/li&gt;
&lt;li&gt;变化的方向隐含着类的责任&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LSP：Liskov替换原则
&lt;ul&gt;
&lt;li&gt;子类必须能够替换它们的基类(IS-A)&lt;/li&gt;
&lt;li&gt;进程表达类型抽象&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ISP：接口隔离原则
&lt;ul&gt;
&lt;li&gt;接口小而完备&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;对象组合优于类继承
&lt;ul&gt;
&lt;li&gt;类继承：白箱复用；对象组合：黑箱复用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;封装变化点
&lt;ul&gt;
&lt;li&gt;使用封装来创建对象之间的分界层&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;针对接口编程优于针对实现编程
&lt;ul&gt;
&lt;li&gt;接口标准化&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h6 id="refactoring-to-patterns"&gt;Refactoring to Patterns
&lt;/h6&gt;&lt;h5 id="重构关键技法"&gt;重构关键技法
&lt;/h5&gt;&lt;p&gt;&lt;em&gt;差&lt;/em&gt;			&lt;em&gt;优&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;静态	 	动态&lt;/p&gt;
&lt;p&gt;早绑定		晚绑定&lt;/p&gt;
&lt;p&gt;继承		 组合&lt;/p&gt;
&lt;p&gt;编译时依赖	运行时依赖&lt;/p&gt;
&lt;p&gt;紧耦合		松耦合&lt;/p&gt;
&lt;p&gt;稳定：非虚函数&lt;/p&gt;
&lt;p&gt;变化：(纯)虚函数&lt;/p&gt;
&lt;p&gt;扩展：继承+虚函数(多态)&lt;/p&gt;
&lt;p&gt;设计经验&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;设计习语：Design Idioms&lt;/li&gt;
&lt;li&gt;设计模式：Design Patterns&lt;/li&gt;
&lt;li&gt;架构模式：Architectural Patterns&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;分类&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;目的&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建型(Creational)&lt;/li&gt;
&lt;li&gt;结构型(Structural)&lt;/li&gt;
&lt;li&gt;行为型(Behavioral)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;范围&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;类模式处理类与子类的静态关系&lt;/li&gt;
&lt;li&gt;对象模式处理对象间的动态关系&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;封装变化角度分类&lt;/p&gt;
&lt;h5 id="组件协作模式"&gt;“组件协作”模式：
&lt;/h5&gt;&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Template Method&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;Observer/Event&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="单一职责模式"&gt;“单一职责”模式：
&lt;/h5&gt;&lt;p&gt;继承—&amp;gt;组合&lt;/p&gt;
&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Decorator&lt;/li&gt;
&lt;li&gt;Bridge&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="对象创建模式"&gt;“对象创建”模式：
&lt;/h5&gt;&lt;p&gt;隔离类对象的使用者和具体类型(易变)之间的耦合关系	紧耦合，绕开new&lt;/p&gt;
&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Factory Method&lt;/li&gt;
&lt;li&gt;Abstract Factory&lt;/li&gt;
&lt;li&gt;Prototype&lt;/li&gt;
&lt;li&gt;
&lt;h6 id="builder"&gt;Builder
&lt;/h6&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="对象性能模式"&gt;“对象性能”模式：
&lt;/h5&gt;&lt;p&gt;性能&lt;/p&gt;
&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;li&gt;Flyweight&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="接口隔离模式"&gt;“接口隔离”模式：
&lt;/h5&gt;&lt;p&gt;添加一层间接(稳定)接口&lt;/p&gt;
&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Facade&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;li&gt;Adapter&lt;/li&gt;
&lt;li&gt;
&lt;h6 id="mediator"&gt;Mediator
&lt;/h6&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="状态变化模式"&gt;“状态变化”模式：
&lt;/h5&gt;&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;State&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6 id="memento"&gt;Memento
&lt;/h6&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="数据结构模式"&gt;“数据结构”模式：
&lt;/h5&gt;&lt;p&gt;用接口代替封装的数据结构&lt;/p&gt;
&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Composite&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h6 id="iterator"&gt;Iterator
&lt;/h6&gt;&lt;/li&gt;
&lt;li&gt;
&lt;h6 id="chain-of-responsibility"&gt;Chain of Responsibility
&lt;/h6&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="行为变化模式"&gt;“行为变化”模式：
&lt;/h5&gt;&lt;p&gt;解耦组件的行为和组件本身&lt;/p&gt;
&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h6 id="command"&gt;Command
&lt;/h6&gt;&lt;/li&gt;
&lt;li&gt;
&lt;h6 id="visitor"&gt;Visitor
&lt;/h6&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="领域规则模式"&gt;“领域规则”模式：
&lt;/h5&gt;&lt;p&gt;典型模式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h6 id="interpreter"&gt;Interpreter
&lt;/h6&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h6 id="template-method"&gt;Template Method
&lt;/h6&gt;&lt;p&gt;动机：稳定的整体结构，各子步骤有很多改变的需求&lt;/p&gt;
&lt;p&gt;定义：定义一个算法的骨架(稳定)，将变化到子类&lt;/p&gt;
&lt;p&gt;早绑定		晚绑定&lt;/p&gt;
&lt;h6 id="strategy"&gt;Strategy
&lt;/h6&gt;&lt;p&gt;动机：对象使用多种的算法，经常改变&lt;/p&gt;
&lt;p&gt;定义：定义一系列的算法，并进行各个封装&lt;/p&gt;
&lt;p&gt;扩展&lt;/p&gt;
&lt;p&gt;动态的思考	时间轴&lt;/p&gt;
&lt;p&gt;结构化：if-else	switch-case&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h6 id="observer"&gt;Observer
&lt;/h6&gt;&lt;p&gt;动机：通知依赖关系&lt;/p&gt;
&lt;p&gt;定义：定义对象间的一种一对多的依赖关系&lt;/p&gt;
&lt;p&gt;松耦合&lt;/p&gt;
&lt;p&gt;基于事件的UI框架，MVC模式&lt;/p&gt;
&lt;h6 id="decorator"&gt;Decorator
&lt;/h6&gt;&lt;p&gt;动机：过度地使用继承来扩展对象的功能&lt;/p&gt;
&lt;p&gt;定义：运行时动态(组合)给一个对象增加一些额外的职责&lt;/p&gt;
&lt;p&gt;消除重复代码，减少子类个数&lt;/p&gt;
&lt;p&gt;同时继承和组合&lt;/p&gt;
&lt;p&gt;解决主体类在多个方向上的扩展功能&lt;/p&gt;
&lt;h6 id="bridge"&gt;Bridge
&lt;/h6&gt;&lt;p&gt;动机：多个维度的变化&lt;/p&gt;
&lt;p&gt;定义：将抽象部分与实现部分分离，使得它们可以独立的变化&lt;/p&gt;
&lt;p&gt;多个非常强的变化维度&lt;/p&gt;
&lt;h6 id="factory-method"&gt;Factory Method
&lt;/h6&gt;&lt;p&gt;动机：创建的对象的具体类型随需求变化而经常变化&lt;/p&gt;
&lt;p&gt;定义：定义一个用于创建对象的接口，让子类决定实例化哪一个类&lt;/p&gt;
&lt;p&gt;目的：解耦&lt;/p&gt;
&lt;p&gt;手段：虚函数&lt;/p&gt;
&lt;h6 id="abstract-factory"&gt;Abstract Factory
&lt;/h6&gt;&lt;p&gt;动机：一系列相互依赖的对象&lt;/p&gt;
&lt;p&gt;定义：提供一个接口&lt;/p&gt;
&lt;h6 id="prototype"&gt;Prototype
&lt;/h6&gt;&lt;p&gt;动机：结构复制的对象&lt;/p&gt;
&lt;p&gt;定义：使用原型实例指定创建对象的种类，通过clone这些原型来创建新的对象&lt;/p&gt;
&lt;h6 id="builder-1"&gt;Builder
&lt;/h6&gt;&lt;p&gt;动机：一个复杂对象&lt;/p&gt;
&lt;p&gt;定义：将一个复杂对象的构建与其表示相分离&lt;/p&gt;
&lt;h6 id="singleton"&gt;Singleton
&lt;/h6&gt;&lt;p&gt;动机：只存在一个实例&lt;/p&gt;
&lt;p&gt;定义：&lt;/p&gt;
&lt;p&gt;并发&lt;/p&gt;
&lt;h6 id="flyweight"&gt;Flyweight
&lt;/h6&gt;&lt;p&gt;动机：存储&lt;/p&gt;
&lt;p&gt;定义：运用共享技术有效地支持大量细粒度的对象&lt;/p&gt;
&lt;p&gt;评估内存开销&lt;/p&gt;
&lt;h6 id="facade"&gt;Facade
&lt;/h6&gt;&lt;p&gt;动机：组件的客户和组件中各种子系统有过多的耦合&lt;/p&gt;
&lt;p&gt;定义：为子系统中的一组接口提供一个一致的界面&lt;/p&gt;
&lt;p&gt;系统间&lt;/p&gt;
&lt;h6 id="proxy"&gt;Proxy
&lt;/h6&gt;&lt;p&gt;动机：分布式，性能，安全&lt;/p&gt;
&lt;p&gt;定义：&lt;/p&gt;
&lt;p&gt;软件系统&lt;/p&gt;
&lt;h6 id="adapter"&gt;Adapter
&lt;/h6&gt;&lt;p&gt;动机：旧对象到新环境&lt;/p&gt;
&lt;p&gt;定义：将一个类的接口转换成另一个接口&lt;/p&gt;
&lt;p&gt;对象适配器&lt;/p&gt;
&lt;p&gt;接口兼容，类库迁移&lt;/p&gt;
&lt;h6 id="mediator-1"&gt;Mediator
&lt;/h6&gt;&lt;p&gt;动机：多个对象互相关联交互，维持复杂的运用关系&lt;/p&gt;
&lt;p&gt;定义：用一个中介对象封装一系列的对象交互&lt;/p&gt;
&lt;p&gt;编译时依赖	运行时依赖&lt;/p&gt;
&lt;p&gt;系统内&lt;/p&gt;
&lt;h6 id="state"&gt;State
&lt;/h6&gt;&lt;p&gt;动机：对象行为随着状态改变&lt;/p&gt;
&lt;p&gt;定义：&lt;/p&gt;
&lt;p&gt;类似Strategy&lt;/p&gt;
&lt;h6 id="memento-1"&gt;Memento
&lt;/h6&gt;&lt;p&gt;动机：程序回溯到对象之前的状态&lt;/p&gt;
&lt;p&gt;定义：不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。&lt;/p&gt;
&lt;p&gt;信息隐藏	序列化&lt;/p&gt;
&lt;h6 id="composite"&gt;Composite
&lt;/h6&gt;&lt;p&gt;动机：过于依赖对象内部实现结构&lt;/p&gt;
&lt;p&gt;定义：将对象组合成树形结构，以表示“结构-整体”的层次结构&lt;/p&gt;
&lt;p&gt;一致性&lt;/p&gt;
&lt;p&gt;将”客户代码与复杂的对象容器结构“解耦&lt;/p&gt;
&lt;h6 id="iterator-1"&gt;Iterator
&lt;/h6&gt;&lt;p&gt;动机：集合对象内部结构&lt;/p&gt;
&lt;p&gt;定义：提供一种方法顺序访问一个聚合对象中的各个元素，不暴露对象的内部表示&lt;/p&gt;
&lt;p&gt;泛型编程&lt;/p&gt;
&lt;h6 id="chain-of-responsibility-1"&gt;Chain of Responsibility
&lt;/h6&gt;&lt;p&gt;动机：让请求的接收者自己在运行时决定处理请求&lt;/p&gt;
&lt;p&gt;定义：使多个对象都有机会处理请求，从而避免请求的发送者和接收者之间的耦合关系。将对象连成一条链，沿着链传递请求&lt;/p&gt;
&lt;h6 id="command-1"&gt;Command
&lt;/h6&gt;&lt;p&gt;动机：行为请求者与行为实现者的“紧耦合”&lt;/p&gt;
&lt;p&gt;定义：将请求封装为对象&lt;/p&gt;
&lt;h6 id="visitor-1"&gt;Visitor
&lt;/h6&gt;&lt;p&gt;动机：类层次结构需要增加新的行为&lt;/p&gt;
&lt;p&gt;定义：表示一个作业于对象结构中的各元素的操作&lt;/p&gt;
&lt;p&gt;double dispatch&lt;/p&gt;
&lt;p&gt;适用于类层次结构稳定，其中的操作改动频繁&lt;/p&gt;
&lt;h6 id="interpreter-1"&gt;Interpreter
&lt;/h6&gt;&lt;p&gt;动机：类似的结构不断重复出现&lt;/p&gt;
&lt;p&gt;定义：给定一个语言，抽象为语法结构&lt;/p&gt;
&lt;h4 id="经验之谈"&gt;经验之谈
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;不要为模式而模式&lt;/li&gt;
&lt;li&gt;关注抽象类和接口&lt;/li&gt;
&lt;li&gt;理清变化点和稳定点&lt;/li&gt;
&lt;li&gt;审视依赖关系&lt;/li&gt;
&lt;li&gt;要有Framework和Application的区隔思维&lt;/li&gt;
&lt;li&gt;良好的设计是演化的结果&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>