OO基础
- 抽象
- 封装
- 多态
- 继承
OO原则
原则 | 描述 |
封装变化 |
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混合在一起。 把会变化的部分取出来并“封装”起来,好让其他部分不受到影响。 |
多用组合,少用继承 |
使用组合建立系统具有很大的弹性,不仅可以将“算法族”封装成类,更可以“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可。 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。 |
针对接口编程,不针对实现编程 | 针对接口编程,真正的意思是针对“超类型”编程,关键就在多态。 |
为交互对象之间的松耦合设计而努力 | |
类应该对外扩展开放,对修改关闭 | |
依赖倒置原则 |
要依赖抽象,不要依赖具体类。 该原则相对于“针对接口编程,不针对实现编程”来说,更加强调“抽象”。 该原则说明: 1. 不能让高层组件依赖低层组件 1.1 当你直接实例化一个对象时,就是在依赖它的具体实现 1.2 所谓"高层"组件,是由其他低层组件定义其行为的类 2. 不管高层组件还是低层组件,都应该依赖抽象 |
最少知识原则(墨忒耳法则) | 只和你的密友谈话 |
好莱坞原则 |
别调用(打电话给)我们,我们会调用(打电话给)你 将决策权放在高层模块中,以便决定如何以及何时调用低层模块。 |
单一原则 | 一个类应该只有一个引起变化的原因 |
OO模式
模式不是代码,而是针对设计问题的通用解决方法。
模式是在某情境下,针对某问题的某种解决方案。
模式是工具而不是规则,需要被适当第调整以符合你的需求。
模式 | 描述 |
装饰者 | 包装一个对象,以提供新的行为。不改变接口,但加入责任 |
状态 | 封装基于状态的行为,并使用委托在行为之间切换 |
迭代器 | 在对象的集合之中游走,而不暴露集合的实现 |
外观 | 提供子系统的一个简化接口,简化一群类的接口 |
策略 | 使用组合封装算法。封装可互换的行为,然后使用委托来决定要采用哪一个行为 |
代理 | 包装对象,以控制对此对象的访问 |
工厂方法 | 由子类决定实例化哪个具体类。 |
适配器 | 封装对象,将一个接口转换成另一个接口 |
观察者 | 当某个状态改变时,允许一群对象能被通知到 |
模板方法 | 使用继承封装算法。子类决定如何实现算法中的步骤 |
单件 | 确保有且只有一个对象被创建 |
组合 | 客户用一致的方式处理对象集合和单个对象 |
抽象工厂 | 允许客户创建对象的家族,而无需指定他们的具体类。 |
命令 | 封装请求成为对象 |
模式可以按照下面的来分类
类别 | 描述 | 模式 |
创建型模式 | 创建型模式涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。 |
Builder Prototype 工厂模式 简单工厂模式 |
行为型模式 | 只要是行为型模式,都涉及类和对象如何交互及分配责任。该模式的目的是对象之间的沟通与互联。 |
Visitor Mediator Memento Interpreter Chain of Responsibility |
结构型模式 | 结构型模式可以让你把类和对象组合到更大的结构中。用来描述类和对象如何被组合以建立新的结构或新的功能。 |
Bridge Flyweight |
同样,也可以按照下面的方式来分
类别 | 描述 | 模式 |
类模式 | 描述类之间的关系如何通过继承定义。类模式的关系是在编译时建立的。 |
Interpreter |
对象模式 | 描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态、更具有弹性。 |
Bridge Flyweight Visitor Memento Chain of Responsibility Mediator Prototype Builder |
类图
策略模式
抽象工厂模式
代理模式
迭代器模式
工厂方法模式
观察者模式
简单工厂模式
命令模式
模板方法
适配器模式
外观模式
装饰者模式
状态模式
组合模式