设计模式学习分享
OOP概要 六大原则
创建型
结构型
行为型
『 为其他对象提供一种代理以控制对 这个对象的访问 』
门面模式
Facade Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 要求一个子系统的外部与其内部的通 信必须通过一个统一的对象进行。门面 模式提供一个高层的接口,使得子系统
更易于使用 』
适配器模式
设计模式概览
OOP概要 六大原则
创建型
结构型
行为型
23 种模式
创建型模式
工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
结构型模式
适配器模式 装饰器模式 代理模式 门面模式 桥接模式 组合模式 享元模式
行为型模式
策略模式
备忘录模式
模板方法模式
状态模式
观察者模式
访问者模式
迭代子模式 责任链模式
面向对象编程
Object-Oriented Programming
OOP概要 六大原则
创建型
结构型
行为型
3 大特征
封装(Encapsulate)
『 隐藏对象的属性和实现细节,仅对外公开接口 』
继承(Inheritance)
『 继承是子类使用父类的方法 』
多态(Polymorphism)
『 接口的多种不同的实现方式即为多态 』
面向对象编程
Object-Oriented Programming
OOP概要 六大原则
创建型
结构型
行为型
关联(Association)
『 类之间的特定对应关系 』
5 种关系
依赖(Dependency)
『 类之间的调用关系 』
聚集(Aggregation)
『 整体与部分之间的关系 』
泛化(Generalization)
一个抽象产品类,可以派生出多个具体产品类 一个抽象工厂类,可以派生出多个具体工厂类 每个具体工厂类通常只能创建一个具体产品类的实例
抽象工厂模式
Abstract Factory Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 为创建一组相关或相互依赖的对象 提供一个接口,而且无需指定他们的 具体类 』
保存的状态 』
访问者模式
Visitor Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 封装一些作用于某种数据结构中的各元 素的操作,它可以在不改变数据结构的前 提下定义作用于这些元素的新的操作 』
中介者模式
Mediator Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 用一个中介对象封装一系列的对象 交互,中介者使各对象不需要显示地 相互作用,从而使其耦合松散,而且
OOP概要 六大原则
创建型
结构型
行为型
『 面向接口编程,依赖于抽象而不依赖于具体 』
高层模块不应该依赖底层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象
接口隔离原则
Interface Segregation Principle
OOP概要 六大原则
创建型
结构型
行为型
『 接口尽量细化,同时接口中的方法尽量少 』
OOP概要 六大原则
创建型
结构型
行为型
『 定义对象间一种一对多的依赖关系,使 得每当一个对象改变状态,则所有依赖于 它的对象都会得到通知并被自动更新 』
迭代器模式
Iterator Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 它提供一种方法访问一个容器对象中各 个元素,而又不需暴露该对象内部细节 』
单一职责原则
Single Responsibility Principle
OOP概要 六大原则
创建型
结构型
行为型
『 应该有且仅有一个原因引起类的变更 』
类的复杂性降低 可读性提高 可维护性提高 变更风险低
里氏替换原则
Liskov Substitution Principle
OOP概要 六大原则
创建型
合成复用原则
Composite Reuse Principle
OOP概要 六大原则
创建型
结构型
行为型
『 尽量使用合成/聚合的方式,而不是使用继承 』
在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现, 即通过组合/聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可 以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影 响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有 效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构 建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用
中介者模式 解释器模式
命令模式
单例模式
Singleton Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 确保某一个类只有一个实例,而且自 行实例化并向整个系统提供这个实例 』
工厂方法模式
Factory Method Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 定义一个用于创建对象的接口,让 子类决定实例化哪一个类,使一个类的 实例化延迟到其子类 』
客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上
· 接口要尽量小 ·接口要高内聚 ·定制服务 ·接口设计是有限度的
迪米特法则
Demeter Principle
OOP概要 六大原则
创建型
结构型
行为型
『 一个对象应该对其他对象有最少的了解 』
只和朋友交流 朋友间也是有距离的 不是自己的就是自己的 谨慎使用Serializable(序列化)
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类 一个抽象工厂类,可以派生出多个具体工厂类 每个具体工厂类可以创建多个具体产品类的实例
原型模式
Prototype Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象 』
建造者模式
可以独立地改变它们之间的交互 』
解释器模式
Interpreter Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 给定一门语言,定义它的文法的一 种表示,并定义一个解释器,该解释器 使用该表示来解释语言中的句子 』
『 当对象的状态改变时,同时改变其行为 』
模板方法模式
Template Method Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 定义一个操作中的算法的框架,而将 一些步骤延迟到子类中,使得子类可以 不改变一个算法的结构即可重定义该算
法的某些特定步骤 』
观察者模式
Observer Pattern
结构型
行为型
『 所有引用基类的地方必须能透明地使用其子类的对象 』
子类必须完全实现父类的方法 子类可以有自己的个性 覆盖或实现父类的方法时输入参数可以被放大(子类输入参数的类型宽于父类) 覆写或实现父类的方法时输出结果可以被缩小
依赖倒置原则
Dependence Inversion Principl创建型
结构型
行为型
『 将一个类的接口变换成客户端所期待的 另一种接口,从而使原本因接口不匹配而 无法在一起工作的两个类能够在一起工作 』
桥接模式
Bridge Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 将抽象和实现解耦,使得两者可以 独立地变化 』
+ +
+
策略模式
Strategy Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 定义一组算法,将每个算法都封装起 来,并且使它们之间可以互换 』
找乔国老, 造舆论
谎报荆州危情, 给刘备收心
找孙尚香断后, 掩护刘备过江
状态模式
State Pattern
OOP概要 六大原则
创建型
结构型
行为型
单一职责原则(Single Responsibility Principle) 里氏替换原则(Liskov Substitution Principle) 依赖倒转原则(Dependence Inversion Principle) 接口隔离原则(Interface Segregation Principle) 迪米特法则 (Demeter Principle) 合成复用原则(Composite Reuse Principle)
创建型
结构型
行为型
『 将一个请求封装成一个对象,从而让你 使用不同的请求把客户端参数化,对请求 排队或者记录请求日志,可以提供命令的
撤销和恢复功能 』
备忘录模式
Memento Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 在不破坏封装性的前提下,捕获一个对 象的内部状态,并在该对象之外保存这个 状态,这样以后就可将该对象恢复到原先
责任链模式
Chain of Responsibility Pattern
OOP概要 六大原则
创建型
结构型
行为型
『 使多个对象都有机会处理请求,从而避 免了请求的发送者和接受者之间的耦合关 系,并沿着这条链传递该请求,直到有对