1. 5.1 开闭原则historical

    1. 什么是开闭原则 对扩展开放,对修改关闭 2. 为什么需要开闭原则 降低维护带来的新风险 3. 开闭原则实现 新需求修改代码的时候看下会不会修改到原有的代码,有的话需要重构:通过接口或者抽象类定义抽象层,将可变因素封装在具体实现类中 继承:里氏替换原则.md 组合/聚合:合成复用原则.md 4.

  2. 5.2 里氏替换原则historical

    1. 什么是里氏替换原则 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 开闭原则在继承中的体现 2. 为什么需要里氏替换原则 通过继承提高软件复用能力 3. 里氏替换原则实现 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法 子类中可以增加自己特有的方法 4. 参考 -

  3. 5.3 依赖倒置原则historical

    1. 什么是依赖倒置原则 高层不应该依赖低层 要面向接口编程,不要面向实现编程。 2. 为什么需要依赖倒置原则 提高可扩展性 3. 依赖倒置原则实现 每个类尽量提供接口或抽象类,或者两者都具备。 变量的声明类型尽量是接口或者是抽象类。 任何类都不应该从具体类派生而应该从抽象类派生。 使用继承时尽量遵

  4. 5.4 单一职责原则historical

    1. 什么是单一职责原则 一个类只干一件事,实现类要单一 2. 为什么需要单一职责原则 提高代码的可读性 3. 单一职责原则实现 需要设计人员发现类的不同职责并将其分离,再封装到不同的类或模块中 4. 参考 - 单一职责原则——面向对象设计原则

  5. 5.5 接口隔离原则historical

    1. 什么是接口隔离原则 一个接口只干一件事,接口要精简单一 2. 为什么需要接口隔离原则 提高代码的可读性 解耦 3. 接口隔离原则实现 接口尽量小,一个接口只服务于一个子模块或业务逻辑。 为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。 4. 参考 - 接口隔离原则——面向对象

  6. 5.6 迪米特法则historical

    1. 什么是迪米特法则 不该知道的不要知道,一个类应该保持对其它对象最少的了解 2. 为什么需要迪米特法则 降低耦合度 3. 迪米特法则实现 从依赖者的角度来说,只依赖应该依赖的对象。 从被依赖者的角度说,只暴露应该暴露的方法。 4. 参考 - 迪米特法则——面向对象设计原则

  7. 5.7 合成复用原则historical

    1. 什么是合成复用原则 尽量使用组合或者聚合关系实现代码复用,少使用继承 开闭原则在组合/聚合中的体现 2. 为什么需要合成复用原则 通过组合提高软件复用能力 3. 合成复用原则实现 将新对象作为原有对象的属性注入 4. 参考 - 合成复用原则——面向对象设计原则

  8. 5.8 OOP设计原则historical

    1. 什么是面向对象设计原则 2. 为什么需要面向对象设计原则 提高代码的可维护性、可扩展性、可复用性 3. 面向对象设计原则分类 3.1. 开闭原则 开闭原则.md 3.2. 里氏替换原则 里氏替换原则.md 3.3. 合成复用原则 合成复用原则.md 3.4. 接口隔离原则 接口隔离原则.md

  9. 6.1 OOP设计模式historical

    1. 什么是设计模式 - 针对某类问题,可复用的解决方案 2. 为什么需要设计模式 3. 设计模式分类 主要分成三类,创建型、结构型、行为型 3.1. 创建型 关注对象的创建 3.2. 结构型 关注类与类之间的组织方式 3.3. 行为型 关注对象之间的交互 4. 参考 - 什么是设计模式? \- 知

  10. 6.2 单例模式historical

    一个类有且仅有一个实例对象 1. uml 2. Java 2.1. 饿汉式 - MySingleton - Client - 特点 - 会在加载类后一开始就被初始化,即使这个实例没有被使用到 2.2. 懒汉式:对整个方法加锁 - 特点 - 只有在真正用到的时候才会创建实例 - 每次调用都要加锁,但其

  11. 6.3 代理模式historical

    1. 定义 不改变原有代码的基础上为类或者函数增加新功能。 我不想做跟我业务无关的东西 2. uml 3. Java 3.1. 静态代理 代理类在编译时生成,需要程序员自己手写 3.1.1. client 3.1.2. 代理 3.1.3. 被代理 3.2. 动态代理 代理类在运行时生成, 利用的ja

  12. 6.4 模板方法historical

    1. 定义 适用于某个算法整体步骤固定,某些部分易变化.可以把变化的部分抽象出来.如servlet的doGet()和doPost()方法 2. uml 3. Java 3.1. client 3.2. 固定步骤 4. Golang 4.1. 第一种 4.1.1. client 4.1.2. 模板方法

  13. 6.5 工厂方法historical

    相对于简单工厂有多个工厂类。我们可以传递具体工厂实例而不是具体的产品到子类中,当需要的时候再调用工厂实例的创建产品方法(等于把创建实例对象的时机延迟到子类中) 1. uml 2. Java 2.1. client 2.2. 工厂 2.3. 产品 3. Golang 3.1. 工厂 3.2. 产品 3

  14. 6.6 状态模式historical

    1. 定义 根据状态的不同选用不同的处理逻辑,用if else太恶心 与策略模式的区别在于策略模式每种策略都是为了完成同一件事,而状态模式则是为了完成不同的事 2. UML 3. Java 3.1. client 3.2. context 3.3. 状态 4. Golang 4.1. 状态 4.2.

  15. 6.7 构建者模式historical

    用于构建一个对象,这个对象由许多小对象组成,且流程复杂.如各种Builder. builder负责构建,director负责组装 1. uml 2. Java 2.1. client 2.2. 产品 2.3. 构造者 2.4. 装配者 3. Golang 3.1. client 3.2. 产品 3.

  16. 6.8 策略模式historical

    1. 定义 完成同一件事有多种不同的方式,根据不同的type选择不同的算法,用if else太恶心 与状态模式的区别在于策略模式每种策略都是为了完成同一件事,而状态模式则是为了完成不同的事 2. uml 3. Java 3.1. client 3.2. context 3.3. 策略 4. Gola

  17. 6.9 观察者模式historical

    1. 定义 - 某个对象状态更新,需要通知给所有对象:广播 - 由两个角色:目标、观察者 - 观察者观察目标(监听目标) - 目标发生变化 - 目标主动通知观察者。 2. UML 3. Java 3.1. client 3.2. 被观察的对象 3.3. 观察者 4. Golang 4.1. 主题 4

  18. 6.10 装饰器模式historical

    1. 定义 不改变原有代码的基础上为类或者函数增加新功能。 我增强我自己的业务功能 2. uml 3. Java 3.1. client 3.2. 原有对象 3.3. 新增功能 4. Golang 4.1. 原有对象 4.2. 新增功能 4.3. client 5. 参考 - Java中“装饰模式”

  19. 6.11 责任链historical

    1. 定义 能处理同一类请求的对象连成一条链,servlet filter 2. uml 3. Java 3.1. client 3.2. 处理链 3.3. 请求 4. Golang 4.1. client 4.2. 处理链 4.3. 请求 5. 实例 5.1. 过滤器链 6. 参考 - niedb

  20. 6.12 适配器模式historical

    1. 定义 兼容旧系统的接口 2. uml 3. Java 3.1. client 3.2. 被适配 3.3. 转换器 4. Golang 4.1. 旧接口 4.2. 新接口 4.3. 转换器 4.4. client

  21. 6.12 原型模式historical

    new 一个对象需要很多数据准备,不如以某个对象为原型,clone一份,再修改value 1. uml 2. Java 2.1. client 2.2. sheep 3. Golang 3.1. Sheep 3.2. client 4. 实例

  22. 6.13 抽象工厂historical

    1. 是什么 有多种产品,每种产品对应一个工厂,同时这个产品需要多个小产品组合而成 抽象工厂模式用于生成产品族的工厂,所生成的产品是有关联的 2. Golang 2.1. 产品 2.2. 工厂 2.3. client

  23. 6.14 简单工厂historical

    把类的创建和使用分离开 1. Java 1.1. client 1.2. 产品 1.3. 工厂 2. Golang 2.1. 产品 2.2. 工厂 2.3. client 3. 实例 模板方法+简单工厂+策略模式 ! 20200913121959997 27705.png - pb.go - abstract template.go - content re

  24. 6.15 用过哪些设计模式historical

    1. 创建型 1.1. 单例模式 解释一下? 一个类有且仅有一个实例 手写一下单例模式的实现? 单例模式.md /notes/software-engineering/%E7%BC%96%E7%A8%8B%E8%8C%83%E5%BC%8F/OOP/OOP%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E5%88%9B%E5%BB

  25. 6.16 享元模式historical

    1. 定义 适用于大量相同或者相似对象的创建,如线程池 2. uml 3. 使用 3.1. client 3.2. 享元 3.3. 工厂

  26. 6.17 外观模式historical

    1. 定义 把复杂的流程封装到一个类中,比如各种util 2. uml 3. Java 3.1. client 3.2. 复杂流程 3.3. 外观 4. Golang 4.1. 复杂流程 4.2. 外观 4.3. client

  27. 6.18 桥接模式historical

    1. 定义 适用于多个维度变化的类层次 2. uml 3. Java 3.1. client 3.2. 维度1 3.3. 维度2 4. 参考 - 设计模式之结构型模式总结 \- Structural Patterns \- 简书

  28. 6.19 组合模式historical

    1. 定义 适用于整体与局部的树形结构,用于统一叶子节点和树节点的访问,并且可以用于应用某一操作到所有子节点。 2. uml 3. Java 3.1. client 3.2. 对象 4. Golang 4.1. 对象 4.2. client

  29. 6.20 中介者模式historical

    1. 定义 适用于多个对象之间相互交互耦合度太高.如mvc中的c 2. uml 3. Java 3.1. client 3.2. 中介者 3.3. 交互对象 4. Golang 4.1. 中介者 4.2. 交互对象 4.3. client

  30. 6.21 命令模式historical

    1. 定义 2. UML 3. Java 3.1. 命令 - Course - ICommand - CloseCommand - OpenCommand 3.2. 命令执行者 - Me 3.3. Client

  31. 6.22 备忘录模式historical

    1. 定义 保存一个对象的某个状态,以便在适当的时候恢复 CTRL+Z的撤销逻辑可以用到这个 2. UML 3. Java 3.1. 备忘的对象 3.2. 备忘录 - ArticleMemento - ArticleMementoManager 3.3. client

  32. 6.23 解释器模式historical

    1. 定义 2. UML

  33. 6.24 访问者模式historical

    1. 定义 将数据结构和操作分离,操作和数据结构各自在不同的类中 2. UML 3. Java 3.1. 数据结构 - Course - CodingCourse - FreeCourse 3.2. 操作 - IVisitor - Visitor 3.3. client

  34. 6.25 迭代器historical

    1. 定义 提供一种遍历聚合对象的方式,JDK已经封装 2. Java 2.1. client 2.2. 迭代器 3. Golang 3.1. 迭代器 3.2. client

  35. 4.8 面向对象编程historical

    1. 面向对象是什么 2. 为什么需要面向对象 3. 怎么设计面向对象 3.1. 面向对象设计原则 OOP设计原则.md /notes/software-engineering/%E7%BC%96%E7%A8%8B%E8%8C%83%E5%BC%8F/OOP/OOP%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99/OOP%E8%AE%