作者:潇洒D-An_na | 来源:互联网 | 2023-09-23 19:18
设计模式是开发过程中不可回避的一个重要应用,通过它我们能写出更加优秀、实用、高效的代码。设计模式在面向对象语言之间通用,它具有以下优点:
设计模式的六大原则:SOLID原则
1. 单一职责原则 (Single Responsibility Principle,SRP)
就一个类而言,应该仅有一个引起它变化的原因
实际使用中,我们是尽量满足这个原则,这个原则涉及到一个颗粒度的把握。对于类来说很难进行设计,因为受到很多因素的制约,类需要承担多种职责通常我们针对接口进行单一职责设计,用类实现多个接口,完成多个职责融合
如:Android中的Activity,它就通过实现接口来丰富自己的职责
public class Activity extends ContextThemeWrapper
implements LayoutInflater.Factory2,
Window.Callback, KeyEvent.Callback,
OnCreateContextMenuListener, ComponentCallbacks2,
Window.OnWindowDismissedCallback, WindowControllerCallback,
AutofillManager.AutofillClient {
...
...
}
2. 开闭原则(Open Closed Principle,OCP)
对扩展开放,对修改关闭
这是六大原则中最重要、基础的原则。其他5个原则如果说是指导设计的工具和方法,开闭原则则是指导思想,它没有具体的做法,需要体会使用
如:Android中接入打印功能时只有打印文字功能,一旦业务扩展需要支持打印图片功能,这时符合开闭原则的做法是:不对已有的打印功能接口及实现类进行修改(对修改关闭),实现新的打印功能接口实现类,在类中支持打印图片(对扩展开放)。
3. 里氏替换原则(Liskov Substitution Principle,LSP)
子类型必须能够替换掉他们的父类型
这在我们的开发过程中十分有帮助,我们不需要关系功能的实现,只在乎有满足功能的类来工作
如:Android开发中经常有使用到上下文Context的地方,我们只需要在传入的地方定义Context,在使用时传入Application、activity都可以
4. 迪米特法则 (Law of Demeter,LoD)
最少知识原则:一个对象应该对其他对象有最少的了解
如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法时,可以通过第三者转发这个调用
目的使得类与类直接关系简洁明了,每个类暴露的对外操作越少,那么对应的耦合就越弱,对应的复用率就越高。
如:Android中工具类的使用,查询数据时不需要直接操作数据库类;访问网络时不需要直接调用网络请求类进行连接。这在后续的修改和调整时都能方便的进行更新
5. 接口隔离原则 (Interface Segregation Principle,ISP)
客户端不应该依赖它不需要的接口、类间的依赖关系应该建立在最小的接口上
保持接口的纯洁性:小(尽量单一职责)、高内聚(减少对外暴露的方法,降低修改成本及风险)
目的就是建立单一接口,接口尽量细化,接口中方法尽量少(与单一原则的区别是:单一职责强调的是职责单一,职责可能包含多个方法)
如:Android中点击回调接口设计,单击、长按、双击都有各自的接口(而不是写在同一个接口中,完成“点击”这一职责)
6. 依赖倒转原则 (Dependence Inversion Principle,DIP)
高层模块不应该依赖低层模块。两个都应该依赖抽象
抽象不应该依赖细节,细节应该依赖抽象
更加简洁的定义就是“面向接口编程”
如:Android开发中常使用的三方SDK调用、方法回调等,不关心功能的实现,只要求满足输入输出的类型。如MVP开发模式中,我们定义P层抽象应具有的功能,V层不需要关系P层的具体实现
设计原则的初衷是服务应用使之质量更高,但应用最终目的是交付使用的,所以对于使用这些原则要做到尽量而不是死抠,要灵活使用而不盲目过度设计
设计模式的三大类型及23种设计模式