读《大话设计模式》
2023-12-17 23:30:28
文章目录
ref
c++解决vscode cmd 输出中文乱码
system(“chcp 65001\n”); // Execute command line command chcp 65001
工厂模式
- 不是GoF设计模式中正式的一员, 被认为是设计模式的起点
- 通过一个专门的类(工厂类)来创建产品对象, 客户端通过工厂类的静态/非静态方法传入参数, 工厂类根据参数决定创建什么产品
- 优点: 对象的创建和使用进行分离, 客户端无需关心具体产品实现, 只需知道产品接口
- 缺点: 增加新产品时需修改工厂类代码, 不符合开闭原则
策略模式
- 定义一系列算法的方法, 以相同的方式调用所有算法(殊途同归), 减少各种算法类和使用算法类之间的耦合
- 优点
- 有助于析取这些算法的公共功能
- 简化了单元测试
单一职责原则
开放-封闭原则
- 对扩展开放, 对更改封闭
依赖倒转原则
- 高层模块不应该依赖低层模块, 两个都应该依赖抽象
- 抽象不应该依赖细节, 细节应该依赖抽象 ( 针对接口编程, 不对实现编程)
- 里氏代换原则: 软件不分辨父类对象和子类对象, 子类型必须能替换其父类型
装饰模式
- 动态地给一个对象添加额外的职责
- 有效地把类的核心职责和装饰功能区分开, 去除重复装饰逻辑
代理模式
- 应用
- 远程代理: 为一个对象在不同地址空间提供局部代表, 隐藏它在不同地址空间的事实(vpn)
- 虚拟代理: 根据需要创建开销很大的对象, 通过其存放实例化需要长时间的真实对象(网页先加载文字后加载图片)
- 安全代理: 控制真实对象访问时的权限(对象应有不同访问权限)
- 智能指引: 调用真实对象时, 代理处理另外一些事
工厂方法模式
- 定义一个用于创建对象的接口, 让子类决定实例化哪个类
- 优点: 符合开闭原则, 新增产品只需添加新工厂类不修改已有代码
- 缺点: 客户端需要知道具体工厂类,
原型模式
- 用原型实例指定创建对象的种类, 通过拷贝这些原型创建新的对象
- (从一个对象再创建另一个可定制的对象, 且无需知道任何创建细节)
模板方法模式
- 将不变行为搬移到父类, 去除子类的重复代码
迪米特法则
- 最少知识原则: 如果两个类不必彼此通信, 两个类就不应发生直接的相互作用. 若一个类需调用另一个类某方法, 可通过第三者转发该调用
外观模式
- 为子系统的一组接口提供一个一致的界面, 让其更容易使用
建造者模式
- (生成器模式):将一个产品的内部表象与生成过程分开, 用户只需指定需要建造的类型, 无需知道具体建造过程和细节
- 应用: 创建一些复杂的对象, 这些对象内部构件建造顺序很稳定, 但对象内部构建常面临复杂的变化
观察者模式
- 发布-订阅(Publish/Subscribe)模式, 定义了一种一对多的依赖关系, 让多个观察者同时监听某对象, 对象变化时通知所有观察者
- 特点: 解耦, subject改变, 所有Observer都得到通知
抽象工厂模式
- 提供一个接口, 创建相关/依赖对象的家族, 无需明确指定具体类
- 优点: 一系列相关产品进行组合, 客户端无需关心具体工厂和产品, 降低客户端与具体实现的耦合
- 缺点: 难以支持新种类产品
- 没看完
16.状态模式
- 当一个对象内在状态改变时允许改变其行为, 看起来像改变了其类
- 当一个对象行为取决于其状态, 且必须在运行时刻根据状态改变行为时使用
- 优点: 将特定状态相关的行为局部化, 将不同状态的行为分隔开
17.适配器模式
- 将一个类的接口转换为客户希望的另一个接口, 解决接口兼容问题
18.备忘录模式
- 不破坏封装性前提下, 捕获一个对象内部状态, 在该对象外保存状态
- 适用于功能复杂但要维护/记录属性历史的类 / 保存属性只是众多属性小部分
19.组合模式
- 将对象组合成树形结构表示部分-整体的层次结构, 用户对单个对象和组合对象的使用有一致性
20.迭代器模式
- 提供一种方法顺序访问一个聚合对象的各个元素, 不暴露对象的内部表示
21.单例模式
- 保证一个类仅有一个实例, 提供一个访问它的全局访问点. 构造方法私有化
22.桥接模式
- 将抽象部分与其实现部分分离, 使其都可以独立变化(实现系统可能有多角度分类, 每种分类都可能变化, 将这种多角度分离让其独立变化, 减少耦合)
合成/聚合复用原则: 尽量用合成/聚合,尽量不用继承 - 优点: 助于每个类被封装, 集中在单个任务上, 类和类层次会保持较小规模, 不会过度增长
23.命令模式
- 将一个请求封装为一个对象, 从而使可用不同请求对客户进行参数化: 对请求排队/请求日志/支持可撤销的操作
- 优点: 分离请求操作的对象与执行操作的对象
- 容易设计命令队列
- 容易记入日志
- 允许接受请求一方决定是否否决请求
- 容易实现请求撤销和重做
- 容易新增具体命令类
24.职责链模式
- 使多个对象都有机会处理请求, 避免请求的发送者和接收者的耦合关系. 将该对象连成一条链, 沿该链传递请求, 直到有对象处理它
- 优点:
- 接收者和发送者都没有对方的明确信息, 链中对象不清楚链的结构, 简化对象的相互连接, 降低耦合
25.中介者模式 Mediator
- (调停者模式) 用一个中介对象来封装一系列的对象交互, 让对象无需显式相互引用, 耦合松散, 可独立改变其之间交互
- 通常应用于一组对象以定义良好但复杂的方式进行通信的场合
- 优点:
- 容易在系统中应用
- 缺点:
- 中介类最复杂
- 中介类最复杂
26.享元模式 Flyweight
- 用共享技术有效支持大量细粒度对象, 避免大量类似的开销
- 在程序设计中, 有时需要生成大量细粒度的类实例表示数据, 如果能发现这些实例除了几个参数外基本相同, 则将不同的参数移到类实例的外面, 在方法调用时传递进来, 就可以通过共享大幅度减少单个实例的数目
- 内部状态: 在享元对象内部且不随环境改变而改变的共享部分
- 外部状态: 随环境改变而改变的, 不可以共享的状态
- 使用场景:
- 若一个应用使用了大量对象, 这些对象造成了很大的内存开销时考虑使用;
- 对象大多数状态可以外部状态, 删除外部状态可用较少的共享对象取代多组对象
27.解释器模式 interpreter
- 给定一个语言, 定义其文法的一种表示, 定义一个解释器, 使用该表示来解释语言中的句子
- 当一个语言需要解释执行, 该语言的句子可表示为一个抽象语法树
- 特点: 容易改变和扩展文法,
- 缺点: 为文法的每一条规则至少定义一个类, 包含多规则的文法可能难以管理维护
28.访问者模式 Visitor
- 表示一个作用于某对象结构中的各元素的操作, 可在不改变各元素的类的前提下定义作用于这些元素的新操作
- 作用: 目的要把处理从数据结构分离, 使算法操作的增加变得容易
文章来源:https://blog.csdn.net/weixin_46143152/article/details/135051747
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!