从零开始学设计模式--模式思维导图(持续更新中)
来源:互联网 发布:租人软件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
- 从零开始学设计模式--模式思维导图(持续更新中)
- 设计模式汇总(持续更新中)
- 设计模式 (持续更新)
- Java设计模式汇总,持续更新中
- IOS 那些设计模式,持续更新中...
- [从零开始学设计模式-java]单例模式(Singleton)
- [从零开始学设计模式-java]代理模式(Proxy Pattern)
- 设计模式概述-持续更新
- C#设计模式中细节总结-持续更新中
- 设计模式思维导图
- 设计模式思维导图
- 设计模式思维导图
- 设计模式思维导图
- 用自己的话来说设计模式(持续更新中···)
- java 设计模式浅析(持续学习更新)
- 23种设计模式(Java)--- 持续更新
- 设计模式学习日记二(持续更新)
- 设计模式概述及详解-持续更新
- androidstudio 导入别人demo报错
- OFDM系统的关键技术及分析
- 报错unrecognized windows sockets error:0:JVM_Bind
- DoubleLockedQueue
- eclipse快捷键
- 从零开始学设计模式--模式思维导图(持续更新中)
- MySQL远程访问配置
- Android Styler插件
- POJ 2389 Bull Math JAVA .
- HDFS原理介绍
- Java中类型转化问题
- 使用spring的requestBody实现List绑定
- 迷笛:追寻自由,做一个理想家
- RHEL6解决无法使用YUM源问题 {已验证切实可行}