You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
3.7 KiB
61 lines
3.7 KiB
---
|
|
设计模式口水话
|
|
---
|
|
|
|
#### 目录
|
|
|
|
1. 六大设计原则
|
|
2. 单例模式
|
|
3. 工厂模式
|
|
4. 建造者模式
|
|
5. 代理模式
|
|
6. 装饰器模式
|
|
7. 适配器模式
|
|
8. 观察者模式
|
|
9. 责任链模式
|
|
|
|
#### 六大设计原则
|
|
|
|
六大设计原则分别是单一职责原则、开闭原则、里式替换原则、接口隔离原则、依赖反转原则及迪米特原则。
|
|
|
|
##### 单一职责原则
|
|
|
|
单一职责原则意思是一个类只做一件事。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。
|
|
|
|
##### 开闭原则
|
|
|
|
开闭原则是指对扩展开放,对修改关闭。具象来说,就是添加一个新的功能时,优先考虑在已有代码的基础上扩展代码,而非修改已有代码,这也要求我们要能写出扩展性好的代码。对扩展开放是为了应对变化(需求),对修改关闭是为了保证已有代码的稳定性,最终结果是为了让系统更有弹性。
|
|
|
|
##### 里式替换原则
|
|
|
|
里式替换原则是指子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变以及正确性不会被破坏。听起来有点运行时多态的味道,但是里式替换作为一种设计原则,是用来指导继承关系中子类该如何设计的,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。一些常见的违背里式替换原则的例子有,子类的方法重写违背了父类声明要实现的功能、子类违背父类对输入/输出/异常的约定、子类违背父类注释中所罗列的任何特殊说明等。简单来说,就是子完美继承了父类的设计初衷,并做了增强。
|
|
|
|
##### 接口隔离原则
|
|
|
|
接口隔离原则是指客户端不应该依赖于它不需要的接口。
|
|
|
|
##### 依赖反转原则
|
|
|
|
依赖反转是指高层模块不要依赖于低层模块,它们应该通过抽象来相互依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。
|
|
|
|
依赖反转容易跟控制反转、依赖注入相混淆。控制反转是一个比较笼统的设计思想,并不是一种具体的实现方法,一般用来指导框架层面的设计。这里所说的控制指的是对程序执行流程的控制,而反转指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程通过框架来控制。流程的控制权从程序员反转给了框架。依赖注入是一种具体的编码技巧,我们不通过 new 的方式在类内部创建依赖类的对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式注入给类来使用。
|
|
|
|
##### 迪米特法则
|
|
|
|
即最小知识原则。说的是,不该有直接依赖关系的类,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。迪米特法则是希望减少类之间的耦合,让类越独立越好,每个类都应该少了解系统的其他部分,一旦发生变化,需要了解这一变化的类就会比较少。它和单一职责的目的都是实现高内聚低耦合,但是出发的角度不一样,单一职责是从自身提供的功能出发,迪米特法则是从关系出发。
|
|
|
|
#### 单例模式
|
|
|
|
单例模式保证一个类仅有一个实例,并提供一个访问它的全剧访问点。它的实现有饿汉式、懒汉式、DCL、静态内部类和枚举。
|
|
|
|
单例模式的应用场景有避免资源访问冲突、表示业务概念上的全剧唯一类。
|
|
|
|
在 Android 中,常用的单例类有 LayoutInflater、LocalBroadcastManager 等。
|
|
|
|
#### 工厂模式
|
|
|
|
工厂模式可以细分为三种类型:简单工厂、工厂方法和抽象工厂。
|
|
|
|
|
|
|
|
#### |