23种设计模式
不知道怎么把思维导图导入到优快云,只能通过百度脑图导出为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处理动作)
组合模式