设计模式第一篇-六大原则

设计模式原则分析-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并不需要知道。

三、总结

         设计模式的这六个原则是思想,需要尽量往这里面靠,当然有时候为了代码逻辑的简介理解,可能有些会背离这边的涉及原则,需要去思考和权衡。但是整体上的涉及是要符合这边的思想的, 后续会逐步讲解每种常用设计模式的使用,有问题疑问也可留言沟通。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文出自《Android源码设计模式解析与实战》中的第一章。 1、优化代码的第一步——单一职责原则 单一职责原则的...
    MrSimp1e0阅读 5,780评论 1 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,098评论 25 709
  • 前言最近同事买了本Android设计模式的书,借来看看,感觉还不错,做一下笔记呗。有兴趣的同学可以买原书看看:《A...
    肖丹晨阅读 4,993评论 0 6
  • 1。我给你孩子拔头皮针,一定是很轻的,拔针也是很快的。但是每次拔完之后我也都会告诉你按住。你不能因为孩子动,没按住...
    南城有书信一封阅读 4,681评论 1 1
  • 亲子日记第三篇 2017年7月4日 天气 阴 刘美彤妈妈 到底有多忙,夜深人静了,终于才能把头埋在枕头里...
    美彤妈妈阅读 876评论 0 1