享元模式 发表于 2019-09-21 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 38k | 阅读时长 ≈ 35 分钟 思考并回答以下问题: 提供了一个享元池用于存储已经创建好的享元对象。怎么理解? 阅读全文 »
中介者模式 发表于 2019-09-21 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 47k | 阅读时长 ≈ 43 分钟 思考并回答以下问题: 中介者模式为什么是行为型模式?为什么是迪米特法则的一个典型应用? 中介者模式的核心在于中介者类的引入,中介者类维护一个同事类的列表。怎么理解? 像QQ群一样,QQ群维护了其他用户的QQ。怎么理解? 阅读全文 »
状态模式 发表于 2019-09-21 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 77k | 阅读时长 ≈ 1:10 思考并回答以下问题: 有些对象也像水一样具有多种状态,这些状态在某些情况下能够相互转换。游戏中是什么对象? 统一由环境类来负责状态之间的转换和由具体状态类来负责状态之间的转换有什么不同? 阅读全文 »
外观模式 发表于 2019-09-20 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 43k | 阅读时长 ≈ 39 分钟 思考并回答以下问题: 外观模式是迪米特法则的一种具体实现。什么是迪米特法则?怎么实现的? 使用外观模式要引入一个新的外观角色,怎么理解? 抽象外观类可以解决传统的外观模式违反开闭原则的缺点。怎么理解? 外观模式为什么是结构型设计模式? 客户端通过外观角色来间接访问子系统。怎么理解? 阅读全文 »
命令模式 发表于 2019-09-18 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 52k | 阅读时长 ≈ 47 分钟 思考并回答以下问题: 最简单的抽象命令类万年不变是什么意思? 命令模式为什么是行为型模式?是如何将请求发送者与请求接收者解耦的? 什么是命令对象?为什么实现了间接引用? 是怎么做到可以在不修改现有系统源代码的情况下让相同的发送者对应不同的接收者的? 命令模式的核心在于引入了抽象命令类和具体命令类。怎么理解? 可以在具体命令类里直接new请求接收者,也可以在客户端注入。怎么理解? “用不同的请求对客户进行参数化”,客户端只需要将具体命令对象作为参数注入请求发送者。怎么理解? 将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法。怎么理解? 一个调用者并不需要在设计时确定其接收者,因此只与抽象命令类之间存在关联关系。怎么理解? 在具体命令类里写代码时直接new Receiver了。怎么理解? 阅读全文 »
单例模式 发表于 2019-09-18 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 28k | 阅读时长 ≈ 25 分钟 思考并回答以下问题: 饿汉式单例在类加载时单例对象就已创建。懒汉式单例类在第一次被引用时将自己实例化,在懒汉式单例类被加载时不会将自己实例化。 阅读全文 »
建造者模式 发表于 2019-09-18 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 64k | 阅读时长 ≈ 58 分钟 思考并回答以下问题: 建造者模式包含4个角色。是哪4个? 在建造者模式的定义中提到了复杂对象,那么什么是复杂对象? 如果将抽象工厂模式看成一个汽车配件生产厂,生成不同类型的汽车配件,那么建造者模式就是一个汽车组装厂,通过对配件进行组装返回一辆完整的汽车。怎么理解? 建造者模式中还引入了一个指挥者类Director,该类主要有两个作用:一方面隔离了客户端与创建过程;另一方面控制产品对象的创建过程。怎么理解? 建造者客户端new一个指挥者,new一个具体建造者,然后调用指挥者的无参方法即可创建一个产品对象。怎么理解? 抽象建造者是直接new了产品,然后对属性的不同赋值交给子类去完成。怎么理解? Director可以省略吗? 阅读全文 »
抽象工厂模式 发表于 2019-09-17 | 更新于 2024-09-02 | 分类于 设计模式 本文字数: 36k | 阅读时长 ≈ 33 分钟 思考并回答以下问题: 为什么系统中会存在大量的工厂类?可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产。怎么理解? 产品等级结构即产品的继承结构是什么意思? 产品族又是什么? 一个工厂产生多个类,这些类都有不同的抽象父类。怎么理解? 抽象工厂模式与工厂方法模式最大的区别是什么? 阅读全文 »