# js设计模式 **Repository Path**: laoyaowang/js-design-pattern ## Basic Information - **Project Name**: js设计模式 - **Description**: js 设计模式示例代码 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-08 - **Last Updated**: 2024-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JS 设计模式 > JS 设计模式示例代码 ## 总体分为三大类 - 创建型模式: - 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 - 结构型模式: - 装饰器模式、代理模式、适配器模式、组合模式、享元模式、门面模式、桥接模式 - 行为型模式: - 观察者模式、策略模式、模板方法模式、迭代器模式、命令模式、责任链模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 ### 工厂方法模式 - 工厂方法模式定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个。可以将对象的创建和使用分离,使得系统更加灵活 ### 抽象工厂模式 - 提供了一种封装一组具有相同主题的单个工厂的方式。它有一个接口,用于创建相关或依赖对象的家族,而不需要指定实际实现的类 ### 单例模式 - 确保一个类只有一个实例,并为该实例提供全局访问点 ### 建造者模式 - 通过一步步的构建流程来创建复杂对象 ### 原型模式 - 它可以用于创建对象的成本相对较高,但对于由相同属性的对象可以通过克隆来创建。原型模式将对象的创建过程和对象的使用过程分离,它通过克隆已有对象来创建新的对象,从而避免了昂贵的对象创建过程 ### 适配器模式 - 允许将不兼容的对象包装在适配器中,从而使它们能够在一起工作 ### 装饰模式 - 允许在不影响其他对象的情况下,动态地将功能添加到对象中 ### 代理模式 - 允许在访问对象时提供一个占位符或代理,以控制对对象的访问 ### 门面模式 - 它为一组复杂的子系统提供了一个更简单的接口 ### 桥接模式 - 它将一个对象的抽象和实现分离开来,从而使它们都可以独立变化 ### 组合模式 - 它使用树形结构来表示对象的部分-整体层次结构,并使用户能够以统一的方式处理单个对象和对象组合 ### 享元模式 - 它通过共享对象来最小化内存使用和类实例化的数量 ### 策略模式 - 它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户端而独立变化 ### 模板方法模式 - 它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤 ### 观察者模式 - 对象之间存在一对多的依赖关系。当一个对象的状态发生变化时,它的所有依赖者都得到通知并自动更新。将对象之间的关系解耦,使得它们可以独立变化 ### 迭代器模式 - 它提供了一种方式来顺序访问集合对象中的元素。将遍历集合的责任交给迭代器,而不是集合自己。这样就可以将集合的实现和遍历算法的实现分离开来,从而提供更好的灵活性 ### 责任链模式 - 它可以让多个对象都有机会处理请求,从而避免将请求的发送者和接收者耦合在一起。将这些对象连成一个链,并沿着这条链传递请求,直到有一个对象处理它为止 ### 命令模式 - 它将请求或操作封装到一个对象中,从而允许你将请求或操作的发起者与具体执行者解耦。可以将请求或操作参数化,甚至在运行时动态地组合命令 ### 备忘录模式 - 它允许你在不暴露对象实现细节的情况下保存和恢复对象的状态 ### 状态模式 - 它允许对象在其内部状态发生改变时改变其行为。通过将每个状态封装在一个类中,使得对于该状态进行的任何操作都可以在该类中处理。从而将状态转换的代码从主要业务逻辑中抽离出来,避免出现大量 `if-else` 语句 ### 访问者模式 - 它允许你将算法封装在一个或多个访问者类中,从而让你在不改变各个元素类接口的前提下定义作用于这些元素的新操作 ### 中介者模式 - 它允许你减少组件之间的直接依赖关系,将它们通过一个中介者对象进行交互。通过避免在组件之间显式引用彼此,中介者可以让你更容易地复用组件 ### 解释器模式 - 它能够将一种语言(通常是一种编程语言)或者表达式的文法表示为解析树,并定义一个解释器,使用该解释器来解释这个语言或者表达式