从零开始学设计模式--模式思维导图(持续更新中)

来源:互联网 发布:租人软件app 编辑:程序博客网 时间:2024/05/16 07:14

23种设计模式

不知道怎么把思维导图导入到CSDN,只能通过百度脑图导出为markdown格式,另外提供脑图的链接:
http://naotu.baidu.com/file/52ef5954c025a6101aca1719ecdba3b8?token=4d72c625a56d25c0

桥接模式

将实现和抽象放在两个不同的类的层次(即分离)中而使他们可以独立改变

面向对象的6大原则

单一职责原则

一个类应该职责单一(只有一个引起变化的原因)

将一组相关性很高的函数,数据封装到一个类中

开闭原则

面对扩展开放,面对修改关闭

通过扩展实现新功能,而不是修改原有的代码

里氏替换原则

抽象父类的抽象方法,强制子类实现方法,从而即使用父类声明的子类,在运行时,也能够在正确的时机和执行顺序

依赖倒置原则

各个模块之间相互传递的参数声明为抽象类型,而不是声明为具体的实现类

依赖抽象,不要依赖具体类

变量不可以持有具体类的引用

不要覆盖基类中已经实现的方法

以实现的基类方法,应该所有子类共享

不要让类派生自具体类

接口隔离原则

讲非常庞大的、臃肿的接口拆分成更小的更具体的接口

迪米特原则

调用方对具体实现不关心,只管调用

设计原则

1.封装变化:找出应用中可能需要变化的和不需要变化的分开,封装变化的代码

2.针对接口编程:添加上层行为接口(抽象超类可以是抽象类或接口),行为与具体实现子类解耦。父类 = new 子类;引用的实际为子类,即运行时制定具体实现的子类

3.多用组合,少用继承:(通过父类的setter方法将封装的行为对象引用设置到具体子类实现)

4.松耦合:为交互对象之间的松耦合设计努力

基础

抽象

封装

多态

继承

策略模式

定义:定义算法族类,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的用户(封装可以互换的行为,并使用委托来决定要使用哪一个)

基于接口编程,超类定义为接口,具体实现继承他

将行为委托给接口

用户需要选择行为,应与简单工厂模式结合使用

不同的算法做同样的事情(封装变化)

对象组合实现(将变化的行为封装为对象,set进来,引用父类,执行的时候动态改变,执行到具体子类)

demo:鸭子会飞会叫,Android动画插值器interpolation,

原则:1-3

单例模式

确保有且只有一个对象被创建

builder模式

内部保证调用顺序等,调用者的链式实现就可以无需关注调用顺序

原型模式

工厂模式

根据传入的参数,返回不同的实现子类对象

抽象工厂方法模式

允许客户创建对象的家族,而无需制定他们的具体类

平行的类层级关系

产品类和工厂类都是 抽象类

通过组合对象实现

简单工厂方法模式

通过继承类实现

覆盖工厂方法

将创建委托给子类处理

工厂方法模式

让类的实例化推迟到了子类

定义了一个创建对象的接口,由子类决定要实例化是哪一个

声明一个抽象工厂方法

让子类决定该创建对象是什么

观察者模式

demo:气象观测站,setOnClickListener

定义:对象之间的一对多以来,这样一来,当一个对象改变状态的时候,他所有的以来这都会受到通知并自动更新

原则:4

让对象能够在状态改变时被通知

观察者模式定义了一系列对象之间的一对多的关系

复合模式

demo:鸭子+加入更多鸭子+厂家定制叫声+鹅+追踪实时叫声

MVC模式

模型-视图-控制器

观察者模式(可观察者:model;观察者:view && controller)
策略(controller是view的策略,即怎么做;view委托controller处理动作)
组合模式

view:视图显示为你更新,使用这个界面的操作 会转到 控制器
controller:控制器操纵模型,发送请求
解读输入,并根据输入操纵模型
与view松耦合,增加view复用
model:模型通知视图状态的改变(数据的变化)
模型包括所有的状态、数据和应用逻辑并执行实际的操作(比如播放MP3)
依赖和改变是单向的,数据改变会造成界面更新,但是界面状态变化,不会改变原数据
提供操纵和检索状态的接口
发送状态改变通知给观察者
demo:利用MVC控制节拍DJ

解决一再发生的一般性问题

装饰者模式

包装一个对象,以提供新的行为

装饰者和被装饰者必须是同一种类型

动态的将责任附加到对象上,想扩展功能,装饰者提供有别于继承的另一种选择

状态模式

封装了基于状态的行为,并使用委托在行为之间切换

允许对象在内部状态改变是改变它的行为,对象看起来好像修改了它的类

客户端对转台对象不了解

迭代器模式

在对象的集合之中游走,而不暴露集合的实现

提供一种方法顺序访问一个聚合对象中的各个元素,而又不是暴露其内部的表示

外观模式

包装对象,以控制对此对象的访问

提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统使用

提供简化的街扩,没有封装接口

适配器模式

封装对象,并提供不同的接口

client和被适配者解耦

将接口转换成另一个

demo:BaseAdapter

代理模式

为另一个对象提供一个替身或占位符以访问这个对象

静态代理

原本类和代理类集成同一个接口

代理类有出游原本类对象的一个引用

模板方法

由子类决定如何实现一个算法中的步骤

定义算法步骤,并允许子类为一个或多个步骤提供实现

与策略模式区别

通过集成实现

与工厂方法区别

共产方法是模板方法的一种特殊版本

组合模式

客户用一致的方式处理对象集合和单个对象

允许将对象组合成树形结构

一直处理个别对象和对象组合

命令模式

封装请求成为对象,以便使用不同的请求、队列或者日志来参数化其他对象

不同的命令做不同的事情

含有接受者的请求

demo:遥控器

0 0
原创粉丝点击