设计模式原则分析-github
一、什么是设计原则?
原则就是一种规范,一种在你去思考项目中需要使用哪种设计模式情况下,需要去考虑的因素,基本上所有的设计模块整体上都需要遵循以下设计原则,当然这六大原则是死的,需要灵活运用,但是软件中的设计模式尽量往这六大原则靠,这是我们的目的。
二、六大原则
1、单一职责原则:Single Responsibility Principle (SRP)
定义: 单一原则要求每个模块只做自己需要做的事情,其他事情由其他模块去做,划分清楚模块, 通俗理解就是每一个类应该是一组相关性很高的函数、数据的集合。
案例: 简单图片加载缓存框架
分析:一个图片加载缓存框架,应该是涉及到图片加载类、图片下载类、 图片缓存类, 这三个类是相互配合完成图片加载缓存框架,但是每个模块的职责都很明确,图片 加载只负责根据url,显示图片,而具体的图片下载流程由图片下载器去处理,使用 的是缓存的数据,还是网络加载数据由缓存类处理,这就是所说的模块划分,图片 处理。
2、开闭原则: Open Close Principle (OCP)
定义:对扩展开放,对修改关闭
案例: 简单图片加载缓存框架
分析: 新增需求,需要在原来内存缓存的基础上新增sdcard缓存,这时候如果原有没设计 好,就会需要去imageloader中新增编写sdcard缓存的代码,这样就违背了对扩展 开 放,对修改关闭的原则,正确的做法应该是由缓存模块去决定使用哪种缓存。
3、李氏替换原则: Liskov Substitution Principle (LSP)
定义:任何一个基类出现的地方,子类必须可以出现,并且可以不出任何错误,因此要 求 必须是父子关系,
特点: 1、在于抽象(继承和接口), 每一个子类都拥有父类所有的方法属性。
2、李氏替换与开闭原则生死相依,通过里氏替换原则达到了对外开放,
对修改关闭
案例: 简单图片加载缓存框架,缓存模块基类ImageCache出现使用的地方,可以使用 任 意的MemoryCache或者SDCardCache替换。
4、依赖倒置原则:Dependence Inversion Principle(DIP)
定义: 高层次模块不依赖于低层次模块实现细节, 通俗理解就是 ,依赖于抽象,不依赖 于 具体实现,核心思想就是面向接口编程。 接口高层次,具体实现低层次
案例:简单图片加载缓存框架
分析: 该框架中的缓存模块,在ImageLoader使用中,不需要关心使用了那种缓存策
略,依赖于接口抽象,不依赖于是具体内存缓存还是sdcard文件缓存
5、接口隔离原则:Interface Segregation Principle(ISP)
定义: 类与类间的依赖关系,应该建立在最小接口上,通俗点就是,不要强迫客户使用 它 们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临 由于这些不使用的方法的改变所带来的改变。
特点:将非常庞大、臃肿接口拆分成更小的更加具体的接口
6、迪米特(最小知识)原则:Least Knowleage Principle(LKP)
定义: 一个对象应该对其他对象有最少的了解,及在满足提供外部所需要的数据接口调 用 以外,尽量不需要外部知道改对象的内部细节,屏蔽外部对对象的实现细节,应该使用修饰符如private 等来控制不必现暴露给外界的方法等。
案例: 简单图片加载框架
分析: ImageLoader不需要对图片缓存模块的细节了解,只需要获取缓存、放入缓存即 可,至于是从内存获取还是从sdcard读取,ImageLoader并不需要知道。
三、总结
设计模式的这六个原则是思想,需要尽量往这里面靠,当然有时候为了代码逻辑的简介理解,可能有些会背离这边的涉及原则,需要去思考和权衡。但是整体上的涉及是要符合这边的思想的, 后续会逐步讲解每种常用设计模式的使用,有问题疑问也可留言沟通。
网友评论