23种设计模式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
式。
结构图
角色与理解
核心代码
组合模式(CompositePattern)(树形结构的处理)
核心代码 角色与理解
47% Option 4
30% Option 3
23% Option 1
56% Option 2
定义
组合多个对象形成树形结构以表 示“整体-部分”的关系的层次结 构。组合模式对叶子节点和容器 节点的处理具有一致性,又称为 整体-部分模式。
之间的访问。
结构图
角色与理解
核心代码
享元模式(FlyweightPattern)(实现对象的复用)
定义
结构图
将系统中细粒度的相同的或者
相似的对象以共享的方式存放
在享元池中供客户端使用。
01
02
角色与理解
03
04
核心代码
ຫໍສະໝຸດ Baidu
代理模式(ProxyPattern)(控制对象的访问)
2014 2015 2016 2017
建造者模式 (BuilderPattern) (复杂对象的构建)
创建型(ConstructionalPatterns)
单例模式(SingletonPattern)(确保对象的唯一性)
01
定义
02
角色与 理解
03
核心代 码
单例模式(SingletonPattern)(确保对象的唯一性)
定义
角色与理解
原型模式(PrototypePattern)(对 象的克隆)
0
0
1
2
定义
结构图
0 3
角色与理解
0 4
ShallowClone
与DeepClone
0 5
核心代码
原型模式 (Prototype Pattern)(对
象的克隆)
定义 拷贝原型实例来创建新的对象
结构图
角色与理解
ShallowClone与DeepClone 浅拷贝:当对象被复制时,只复制对象本身与值类型的成
迪米特法则(Law of Demeter, LoD)
设计模式原则
合成复用原则(Composite Reuse Principle, CRP)
设计模式原则
开闭原则(Open Close Principle,OCP)
一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改 原有代码的情况下进行扩展开闭原则即对拓展开放,对修改关闭,要想在 功能新增的时候不修改原先的代码,即程序中使用的是抽象类或者接口, 我们新增的子类或者实现,这样才能保障我们拓展功能的时候不用修改原 先的代码,所以说抽象化是开闭原则的关键。
设计模式原则
依赖倒转原则(Dependence Inversion Principle,DIP)
抽象不应该依赖于细节,细节应当依赖于抽 象。换言之,要针对接口编程,而不是针对实现 编程依赖倒转原则要求我们在程序代码中传递参 数时或在关联关系中,尽量引用层次高的抽象层 类,即使用接口和抽象类进行变量类型声明、参 数类型声明、方法返回类型声明,以及数据类型 的转换等,而不要用具体类来做这些事情。在实 现依赖倒转原则时,我们需要针对抽象层编程, 而将具体类的对象通过依赖注入(Dependency Injection, DI)的方式注入到其他对象中,依赖 注入是指当一个对象要与其他对象发生依赖关系 时,通过抽象来注入所依赖的对象。常用的注入 方式有三种,分别是:构造注入,设值注入 (Setter注入)和接口注入。构造注入是指通过 构造函数来传入具体类的对象,设值注入是指通 过Setter方法来传入具体类的对象,而接口注入 是指通过在接口中声明的业务方法来传入具体类 的对象。
定义
将一个接口转换客户希望 的另一个接口,使接口不 兼容的那些类能够一起工
作,又名包装器 (Wrapper)。适配器模 式可以为对象适配器模式,
也可以是类适配器模式
结构图
角色与理解
核心代码
桥接模式(BridgePattern)(处理多个维度的变化)
定义
将俩个维度分离,使 他们可以独立变化。
又称为柄体 (Handle and Body)模式或者接 口(interface)模
依赖倒转原则(Dependence Inversion Principle,DIP)
接口隔离原则(Interface Segregation Principle, ISP)
里氏替换原则(Liskov Substitution Principle,LSP)
单一职能原则(Single Responsibility Principle, SRP)
04 核心代 码
建造者模式(BuilderPattern)(复杂对象的构建)
定义
结构图
将一个复杂对象的构建与它
的表示分离,使同样的构建 过程可以创建不同的表示
01
02
角色与理解
03
04
核心代码
结构型 (StructuralPatter ns)
适配器模式(AdapterPattern)(不兼容结构的协调)
设计模式原则 依赖倒转原则(Dependence Inversion Principle,DIP) 这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对 象。开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段。
设计模式原则 单一职能原则(Single Responsibility Principle, SRP) 一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它
设计模式原则
迪米特法则(Law of Demeter, LoD )
一个软件实体应当尽可能少地与其他实体发生相互作用。**类与类 之间的耦合度应尽量的低,这样如果类发生变化,影响才会最小。 不要和陌生人说话,只和你的直接朋友通信,直接朋友包含如下: 当前对象本身(this)作为参数的对象成员变量集合成员变量中的 元素创建的对象可以通过使用第三者类来降低两个类的耦合度。
设计模式原则
合成复用原则(Composite Reuse Principle, CRP)
尽量使用对象组合,而不是继承来达到复用的目的通过继承来实现复用的问题是 它会破坏封装性,子类能够看到基类的实现细节,自身类通过继承而来的基类方 法是静态的(因为继承的类是确定的),而通过调用成员变量去执行成员变量的 方法是动态的,因为成员变量可以是抽象化的,而实现类可以有很多种,每一种 实现类的功能又不相同,但是他们可以被当作同一类型而被引入。
结构图
解释器模式(InterpreterPattern)(树形结构的处理)
1 定义
定义一个语言的文法,并创建一个解释 器去解释该语言中的句子,这里的“语 言”是指使用规定格式和语法的代码。
3 角色与理解
2 结构图 4 核心代码
迭代器模式(IteratorPattern)(遍历聚合对象中的元素)
壹
变化的原因类的功能尽量单一,这样才能提高复用率。单一职能原则是软件高内聚低耦合的指导方针。
设计模式原则
接口隔离原则(Interface Segregation Principle, ISP)
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接 口每一接口都应该承担一种相对独立的角色,该干的事情都敢,不该干的事情都不敢。
确保某个类只有一个实例, 并且自行实例化并向整个 系统提供这个实例,这个 类称为单例类,它提供全
局访问的方法。
单例模式只包含一种角色 那就是单例角色,
Singleton(单例)。 单例模式有单个要点:这 个类只有一个实例它自行 创建这个实例它自行向整
个系统提供这个实例
核心代码
创建型 (Constructio nalPatterns)
定义
通过一个代理对象或者占位符来控制对原对象的访问。
结构图
角色与理解
核心代码
行为型 (BehavioralPatte rns)
责任链模式 (ChainOfResponsibilityPatter n)(请求的链式处理)
定义 将请求发送者和请求接受者解
耦,让请求的接受者形成链式操 作,所有人都能够接受接受到请 求,直到有人处理请求。
创建型 (ConstructionalP atterns)
创建型(ConstructionalPatterns)
单例模式 (SingletonPattern) (确保对象的唯一性)
01
02
原型模式 (PrototypePatter
n)(对象的克隆)
03
04
工厂模式 ( Fa c tor yPatte r n)
23种设计模式
演讲人
2 0 2 5 - 11 - 11
目录
01. 设计模式原则
02.
创建型(ConstructionalPatterns)
03.
结构型(StructuralPatterns)
04.
行为型(BehavioralPatterns)
05. 自由主题
设计模式原则
设计模式原则
开闭原则(Open Close Principle, OCP)
工厂模式 (Fa ctor yPa t t er n )
简单工厂模式 (SimpleFactor
yPattern)
工厂方法模式 (Factor yM eth
odPattern)
抽象工厂模式 (AbstractFact
or yPa tter n )
简单工厂模式(SimpleFactor yPattern)
1
定义
定义一个工厂类, 并提供一个抽象工 厂方法,该方法通 过传入不同的入参 而制造出特定的产 品,且所有产品具
有共同的父类。
2 结构图
3 角色与理解
4 核心代码
工厂方法模式(Factor yMethodPattern)
定义
定义一个用于创建对象的接口,让子类决定将哪一个产品实例化。工厂 方法模式让一个类的实例化延迟到工厂类的子类。工厂方法模式简称为 工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。
角色与理解
结构图 核心代码
抽象工厂模式(AbstractFactor yPattern)
1
定义
提供一个创建一系 列相关或者相互依 赖的类的工厂接口, 他包含多个产品类 的工厂方法,及一 个工厂类能够创建
多个产品。
2 结构图
3 角色与理解
4 核心代码
创建型 (Constructio nalPatterns)
定义
提供一种方法来访问聚合对 象中的元素,而不用暴露聚 合对象的内部表示,其别名 为游标(cursor)。
叁 角色与理解
贰 结构图 肆 核心代码
结构图
装饰模式(DecoratorPattern)(拓展系统功能)
定义
动态的给一个对象增 加一些职能,相对与 生成子类更加灵活。
结构图
角色与理解
核心代码
注意事项
门面模式(FacadePattern)(子系统的统一入口)
定义
又称为门面模式,为子 系统中一组接口提供一 个统计的入口。外观模 式定义了一个高层接口, 方便了客户端与子系统
员变量,引用类型的成员变量没有被复制 深拷贝:当对象被复制时,对象本身、值类型成员变量、引 用类型成员变量都会被复制,原型对象与复制对象完全独立 核心代码
创建型 (ConstructionalPatt erns)
建造者模式(BuilderPattern)(复 杂对象的构建)
01 定义
02 结构图
03 角色与 理解
设计模式原则
里氏替换原则(Liskov Substitution Principle,LSP)
所有引用基类(父类)的地方必 须能透明地使用其子类的对象基类存 在的地方必定能被子类替换,且功能 不会发生影响。里氏替换原则是“开 -闭原则的补充”。里氏替换通俗来 讲就是子类可以拓展父类但是不能改 变父类已确定的行为,包含以下四个 含义:子类可以实现父类的抽象方法, 但是不能覆盖父类的非抽象方法子类 中可以增加自己特有的方法当子类重 载父类方法时,形参的范围要比父类 的形参范围大,这样别的类调用这个 方法时会优先匹配父类的实现而不是 子类的实现当子类实现父类的抽象方 法时,方法的返回值要比父类更严格, 也可以说成更具体
结构图
角色与理解
核心代码
命令模式(CommandPattern)(请求发送者与请求接收者解耦)
核心代码 角色与理解
47% Option 4
30% Option 3
23% Option 1
56% Option 2
定义
将一个请求封装为一个对象,从 而让我们可用不同的请求对客户 进行参数化;对请求排队或者记 录请求日志,以及支持可撤销的 操作。其别名为动作(Action)模 式 或 事 务 (Tran sact ion) 模式。
结构图
角色与理解
核心代码
组合模式(CompositePattern)(树形结构的处理)
核心代码 角色与理解
47% Option 4
30% Option 3
23% Option 1
56% Option 2
定义
组合多个对象形成树形结构以表 示“整体-部分”的关系的层次结 构。组合模式对叶子节点和容器 节点的处理具有一致性,又称为 整体-部分模式。
之间的访问。
结构图
角色与理解
核心代码
享元模式(FlyweightPattern)(实现对象的复用)
定义
结构图
将系统中细粒度的相同的或者
相似的对象以共享的方式存放
在享元池中供客户端使用。
01
02
角色与理解
03
04
核心代码
ຫໍສະໝຸດ Baidu
代理模式(ProxyPattern)(控制对象的访问)
2014 2015 2016 2017
建造者模式 (BuilderPattern) (复杂对象的构建)
创建型(ConstructionalPatterns)
单例模式(SingletonPattern)(确保对象的唯一性)
01
定义
02
角色与 理解
03
核心代 码
单例模式(SingletonPattern)(确保对象的唯一性)
定义
角色与理解
原型模式(PrototypePattern)(对 象的克隆)
0
0
1
2
定义
结构图
0 3
角色与理解
0 4
ShallowClone
与DeepClone
0 5
核心代码
原型模式 (Prototype Pattern)(对
象的克隆)
定义 拷贝原型实例来创建新的对象
结构图
角色与理解
ShallowClone与DeepClone 浅拷贝:当对象被复制时,只复制对象本身与值类型的成
迪米特法则(Law of Demeter, LoD)
设计模式原则
合成复用原则(Composite Reuse Principle, CRP)
设计模式原则
开闭原则(Open Close Principle,OCP)
一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改 原有代码的情况下进行扩展开闭原则即对拓展开放,对修改关闭,要想在 功能新增的时候不修改原先的代码,即程序中使用的是抽象类或者接口, 我们新增的子类或者实现,这样才能保障我们拓展功能的时候不用修改原 先的代码,所以说抽象化是开闭原则的关键。
设计模式原则
依赖倒转原则(Dependence Inversion Principle,DIP)
抽象不应该依赖于细节,细节应当依赖于抽 象。换言之,要针对接口编程,而不是针对实现 编程依赖倒转原则要求我们在程序代码中传递参 数时或在关联关系中,尽量引用层次高的抽象层 类,即使用接口和抽象类进行变量类型声明、参 数类型声明、方法返回类型声明,以及数据类型 的转换等,而不要用具体类来做这些事情。在实 现依赖倒转原则时,我们需要针对抽象层编程, 而将具体类的对象通过依赖注入(Dependency Injection, DI)的方式注入到其他对象中,依赖 注入是指当一个对象要与其他对象发生依赖关系 时,通过抽象来注入所依赖的对象。常用的注入 方式有三种,分别是:构造注入,设值注入 (Setter注入)和接口注入。构造注入是指通过 构造函数来传入具体类的对象,设值注入是指通 过Setter方法来传入具体类的对象,而接口注入 是指通过在接口中声明的业务方法来传入具体类 的对象。
定义
将一个接口转换客户希望 的另一个接口,使接口不 兼容的那些类能够一起工
作,又名包装器 (Wrapper)。适配器模 式可以为对象适配器模式,
也可以是类适配器模式
结构图
角色与理解
核心代码
桥接模式(BridgePattern)(处理多个维度的变化)
定义
将俩个维度分离,使 他们可以独立变化。
又称为柄体 (Handle and Body)模式或者接 口(interface)模
依赖倒转原则(Dependence Inversion Principle,DIP)
接口隔离原则(Interface Segregation Principle, ISP)
里氏替换原则(Liskov Substitution Principle,LSP)
单一职能原则(Single Responsibility Principle, SRP)
04 核心代 码
建造者模式(BuilderPattern)(复杂对象的构建)
定义
结构图
将一个复杂对象的构建与它
的表示分离,使同样的构建 过程可以创建不同的表示
01
02
角色与理解
03
04
核心代码
结构型 (StructuralPatter ns)
适配器模式(AdapterPattern)(不兼容结构的协调)
设计模式原则 依赖倒转原则(Dependence Inversion Principle,DIP) 这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对 象。开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段。
设计模式原则 单一职能原则(Single Responsibility Principle, SRP) 一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它
设计模式原则
迪米特法则(Law of Demeter, LoD )
一个软件实体应当尽可能少地与其他实体发生相互作用。**类与类 之间的耦合度应尽量的低,这样如果类发生变化,影响才会最小。 不要和陌生人说话,只和你的直接朋友通信,直接朋友包含如下: 当前对象本身(this)作为参数的对象成员变量集合成员变量中的 元素创建的对象可以通过使用第三者类来降低两个类的耦合度。
设计模式原则
合成复用原则(Composite Reuse Principle, CRP)
尽量使用对象组合,而不是继承来达到复用的目的通过继承来实现复用的问题是 它会破坏封装性,子类能够看到基类的实现细节,自身类通过继承而来的基类方 法是静态的(因为继承的类是确定的),而通过调用成员变量去执行成员变量的 方法是动态的,因为成员变量可以是抽象化的,而实现类可以有很多种,每一种 实现类的功能又不相同,但是他们可以被当作同一类型而被引入。
结构图
解释器模式(InterpreterPattern)(树形结构的处理)
1 定义
定义一个语言的文法,并创建一个解释 器去解释该语言中的句子,这里的“语 言”是指使用规定格式和语法的代码。
3 角色与理解
2 结构图 4 核心代码
迭代器模式(IteratorPattern)(遍历聚合对象中的元素)
壹
变化的原因类的功能尽量单一,这样才能提高复用率。单一职能原则是软件高内聚低耦合的指导方针。
设计模式原则
接口隔离原则(Interface Segregation Principle, ISP)
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接 口每一接口都应该承担一种相对独立的角色,该干的事情都敢,不该干的事情都不敢。
确保某个类只有一个实例, 并且自行实例化并向整个 系统提供这个实例,这个 类称为单例类,它提供全
局访问的方法。
单例模式只包含一种角色 那就是单例角色,
Singleton(单例)。 单例模式有单个要点:这 个类只有一个实例它自行 创建这个实例它自行向整
个系统提供这个实例
核心代码
创建型 (Constructio nalPatterns)
定义
通过一个代理对象或者占位符来控制对原对象的访问。
结构图
角色与理解
核心代码
行为型 (BehavioralPatte rns)
责任链模式 (ChainOfResponsibilityPatter n)(请求的链式处理)
定义 将请求发送者和请求接受者解
耦,让请求的接受者形成链式操 作,所有人都能够接受接受到请 求,直到有人处理请求。
创建型 (ConstructionalP atterns)
创建型(ConstructionalPatterns)
单例模式 (SingletonPattern) (确保对象的唯一性)
01
02
原型模式 (PrototypePatter
n)(对象的克隆)
03
04
工厂模式 ( Fa c tor yPatte r n)
23种设计模式
演讲人
2 0 2 5 - 11 - 11
目录
01. 设计模式原则
02.
创建型(ConstructionalPatterns)
03.
结构型(StructuralPatterns)
04.
行为型(BehavioralPatterns)
05. 自由主题
设计模式原则
设计模式原则
开闭原则(Open Close Principle, OCP)
工厂模式 (Fa ctor yPa t t er n )
简单工厂模式 (SimpleFactor
yPattern)
工厂方法模式 (Factor yM eth
odPattern)
抽象工厂模式 (AbstractFact
or yPa tter n )
简单工厂模式(SimpleFactor yPattern)
1
定义
定义一个工厂类, 并提供一个抽象工 厂方法,该方法通 过传入不同的入参 而制造出特定的产 品,且所有产品具
有共同的父类。
2 结构图
3 角色与理解
4 核心代码
工厂方法模式(Factor yMethodPattern)
定义
定义一个用于创建对象的接口,让子类决定将哪一个产品实例化。工厂 方法模式让一个类的实例化延迟到工厂类的子类。工厂方法模式简称为 工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。
角色与理解
结构图 核心代码
抽象工厂模式(AbstractFactor yPattern)
1
定义
提供一个创建一系 列相关或者相互依 赖的类的工厂接口, 他包含多个产品类 的工厂方法,及一 个工厂类能够创建
多个产品。
2 结构图
3 角色与理解
4 核心代码
创建型 (Constructio nalPatterns)
定义
提供一种方法来访问聚合对 象中的元素,而不用暴露聚 合对象的内部表示,其别名 为游标(cursor)。
叁 角色与理解
贰 结构图 肆 核心代码
结构图
装饰模式(DecoratorPattern)(拓展系统功能)
定义
动态的给一个对象增 加一些职能,相对与 生成子类更加灵活。
结构图
角色与理解
核心代码
注意事项
门面模式(FacadePattern)(子系统的统一入口)
定义
又称为门面模式,为子 系统中一组接口提供一 个统计的入口。外观模 式定义了一个高层接口, 方便了客户端与子系统
员变量,引用类型的成员变量没有被复制 深拷贝:当对象被复制时,对象本身、值类型成员变量、引 用类型成员变量都会被复制,原型对象与复制对象完全独立 核心代码
创建型 (ConstructionalPatt erns)
建造者模式(BuilderPattern)(复 杂对象的构建)
01 定义
02 结构图
03 角色与 理解
设计模式原则
里氏替换原则(Liskov Substitution Principle,LSP)
所有引用基类(父类)的地方必 须能透明地使用其子类的对象基类存 在的地方必定能被子类替换,且功能 不会发生影响。里氏替换原则是“开 -闭原则的补充”。里氏替换通俗来 讲就是子类可以拓展父类但是不能改 变父类已确定的行为,包含以下四个 含义:子类可以实现父类的抽象方法, 但是不能覆盖父类的非抽象方法子类 中可以增加自己特有的方法当子类重 载父类方法时,形参的范围要比父类 的形参范围大,这样别的类调用这个 方法时会优先匹配父类的实现而不是 子类的实现当子类实现父类的抽象方 法时,方法的返回值要比父类更严格, 也可以说成更具体
结构图
角色与理解
核心代码
命令模式(CommandPattern)(请求发送者与请求接收者解耦)
核心代码 角色与理解
47% Option 4
30% Option 3
23% Option 1
56% Option 2
定义
将一个请求封装为一个对象,从 而让我们可用不同的请求对客户 进行参数化;对请求排队或者记 录请求日志,以及支持可撤销的 操作。其别名为动作(Action)模 式 或 事 务 (Tran sact ion) 模式。