OOP
Software Architecture & Engineering · 35 篇笔记
- 5.1 开闭原则historical
1. 什么是开闭原则 对扩展开放,对修改关闭 2. 为什么需要开闭原则 降低维护带来的新风险 3. 开闭原则实现 新需求修改代码的时候看下会不会修改到原有的代码,有的话需要重构:通过接口或者抽象类定义抽象层,将可变因素封装在具体实现类中 继承:里氏替换原则.md 组合/聚合:合成复用原则.md 4.
- 5.2 里氏替换原则historical
1. 什么是里氏替换原则 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 开闭原则在继承中的体现 2. 为什么需要里氏替换原则 通过继承提高软件复用能力 3. 里氏替换原则实现 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法 子类中可以增加自己特有的方法 4. 参考 -
- 5.3 依赖倒置原则historical
1. 什么是依赖倒置原则 高层不应该依赖低层 要面向接口编程,不要面向实现编程。 2. 为什么需要依赖倒置原则 提高可扩展性 3. 依赖倒置原则实现 每个类尽量提供接口或抽象类,或者两者都具备。 变量的声明类型尽量是接口或者是抽象类。 任何类都不应该从具体类派生而应该从抽象类派生。 使用继承时尽量遵
- 5.4 单一职责原则historical
1. 什么是单一职责原则 一个类只干一件事,实现类要单一 2. 为什么需要单一职责原则 提高代码的可读性 3. 单一职责原则实现 需要设计人员发现类的不同职责并将其分离,再封装到不同的类或模块中 4. 参考 - 单一职责原则——面向对象设计原则
- 5.5 接口隔离原则historical
1. 什么是接口隔离原则 一个接口只干一件事,接口要精简单一 2. 为什么需要接口隔离原则 提高代码的可读性 解耦 3. 接口隔离原则实现 接口尽量小,一个接口只服务于一个子模块或业务逻辑。 为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。 4. 参考 - 接口隔离原则——面向对象
- 5.6 迪米特法则historical
1. 什么是迪米特法则 不该知道的不要知道,一个类应该保持对其它对象最少的了解 2. 为什么需要迪米特法则 降低耦合度 3. 迪米特法则实现 从依赖者的角度来说,只依赖应该依赖的对象。 从被依赖者的角度说,只暴露应该暴露的方法。 4. 参考 - 迪米特法则——面向对象设计原则
- 5.7 合成复用原则historical
1. 什么是合成复用原则 尽量使用组合或者聚合关系实现代码复用,少使用继承 开闭原则在组合/聚合中的体现 2. 为什么需要合成复用原则 通过组合提高软件复用能力 3. 合成复用原则实现 将新对象作为原有对象的属性注入 4. 参考 - 合成复用原则——面向对象设计原则
- 5.8 OOP设计原则historical
1. 什么是面向对象设计原则 2. 为什么需要面向对象设计原则 提高代码的可维护性、可扩展性、可复用性 3. 面向对象设计原则分类 3.1. 开闭原则 开闭原则.md 3.2. 里氏替换原则 里氏替换原则.md 3.3. 合成复用原则 合成复用原则.md 3.4. 接口隔离原则 接口隔离原则.md
- 6.1 OOP设计模式historical
1. 什么是设计模式 - 针对某类问题,可复用的解决方案 2. 为什么需要设计模式 3. 设计模式分类 主要分成三类,创建型、结构型、行为型 3.1. 创建型 关注对象的创建 3.2. 结构型 关注类与类之间的组织方式 3.3. 行为型 关注对象之间的交互 4. 参考 - 什么是设计模式? \- 知
- 6.2 单例模式historical
一个类有且仅有一个实例对象 1. uml 2. Java 2.1. 饿汉式 - MySingleton - Client - 特点 - 会在加载类后一开始就被初始化,即使这个实例没有被使用到 2.2. 懒汉式:对整个方法加锁 - 特点 - 只有在真正用到的时候才会创建实例 - 每次调用都要加锁,但其
- 6.3 代理模式historical
1. 定义 不改变原有代码的基础上为类或者函数增加新功能。 我不想做跟我业务无关的东西 2. uml 3. Java 3.1. 静态代理 代理类在编译时生成,需要程序员自己手写 3.1.1. client 3.1.2. 代理 3.1.3. 被代理 3.2. 动态代理 代理类在运行时生成, 利用的ja
- 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. 模板方法
- 6.5 工厂方法historical
相对于简单工厂有多个工厂类。我们可以传递具体工厂实例而不是具体的产品到子类中,当需要的时候再调用工厂实例的创建产品方法(等于把创建实例对象的时机延迟到子类中) 1. uml 2. Java 2.1. client 2.2. 工厂 2.3. 产品 3. Golang 3.1. 工厂 3.2. 产品 3
- 6.6 状态模式historical
1. 定义 根据状态的不同选用不同的处理逻辑,用if else太恶心 与策略模式的区别在于策略模式每种策略都是为了完成同一件事,而状态模式则是为了完成不同的事 2. UML 3. Java 3.1. client 3.2. context 3.3. 状态 4. Golang 4.1. 状态 4.2.
- 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.
- 6.8 策略模式historical
1. 定义 完成同一件事有多种不同的方式,根据不同的type选择不同的算法,用if else太恶心 与状态模式的区别在于策略模式每种策略都是为了完成同一件事,而状态模式则是为了完成不同的事 2. uml 3. Java 3.1. client 3.2. context 3.3. 策略 4. Gola
- 6.9 观察者模式historical
1. 定义 - 某个对象状态更新,需要通知给所有对象:广播 - 由两个角色:目标、观察者 - 观察者观察目标(监听目标) - 目标发生变化 - 目标主动通知观察者。 2. UML 3. Java 3.1. client 3.2. 被观察的对象 3.3. 观察者 4. Golang 4.1. 主题 4
- 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中“装饰模式”
- 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
- 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
- 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. 实例
- 6.13 抽象工厂historical
1. 是什么 有多种产品,每种产品对应一个工厂,同时这个产品需要多个小产品组合而成 抽象工厂模式用于生成产品族的工厂,所生成的产品是有关联的 2. Golang 2.1. 产品 2.2. 工厂 2.3. client
- 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
- 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
- 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
- 6.18 桥接模式historical
1. 定义 适用于多个维度变化的类层次 2. uml 3. Java 3.1. client 3.2. 维度1 3.3. 维度2 4. 参考 - 设计模式之结构型模式总结 \- Structural Patterns \- 简书
- 6.19 组合模式historical
1. 定义 适用于整体与局部的树形结构,用于统一叶子节点和树节点的访问,并且可以用于应用某一操作到所有子节点。 2. uml 3. Java 3.1. client 3.2. 对象 4. Golang 4.1. 对象 4.2. client
- 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
- 6.21 命令模式historical
1. 定义 2. UML 3. Java 3.1. 命令 - Course - ICommand - CloseCommand - OpenCommand 3.2. 命令执行者 - Me 3.3. Client
- 6.22 备忘录模式historical
1. 定义 保存一个对象的某个状态,以便在适当的时候恢复 CTRL+Z的撤销逻辑可以用到这个 2. UML 3. Java 3.1. 备忘的对象 3.2. 备忘录 - ArticleMemento - ArticleMementoManager 3.3. client
- 6.24 访问者模式historical
1. 定义 将数据结构和操作分离,操作和数据结构各自在不同的类中 2. UML 3. Java 3.1. 数据结构 - Course - CodingCourse - FreeCourse 3.2. 操作 - IVisitor - Visitor 3.3. client
- 6.25 迭代器historical
1. 定义 提供一种遍历聚合对象的方式,JDK已经封装 2. Java 2.1. client 2.2. 迭代器 3. Golang 3.1. 迭代器 3.2. client
- 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%