编程的技术要想更加精进,我们除了学习新的技术外,更加需要提高的是编程的思想!一个项目前期设计的好了,后期维护起来会更加的方便,轻松!所以在编写项目时候要做到六个字:低耦合,高内聚!设计模式在大学学习的时候好像专门有这门书,工作之后也偶尔翻翻,但是看过之后很快就忘的差不多了!所以打算趁着出差的空隙再进行一遍常用设计模式的总结学习!
先来设计模式的六大原则吧!
设计模式六大原则(一):单一职责原则
定义:不要存在多于一个导致类变更的原因。什么意思呢?通俗的说就是一个类只负责一项职责!
但是,在实际的开发中并不是所有的情况都合适!举个栗子吧!Android开发中,我们会将功能相关的类抽取出来,生成一个工具类!在这个工具类中有各种各样的方法,担任不同的作用,比如获取系统的版本,制造厂商,App版本号等。从大的方面说,它遵循单一职责原则,这个类只负责提供系统信息方面的信息,但是从小的方面来说它并不符合单一职责的原则,它的个个方法提供不同的信息!
所以在实际开发中,考虑到开销的问题,我们并不一定非要严格的遵循它!可以灵活的变通!
说了这么多,我们总结一下它的优点:
1.对于个个类之间,我们可以降低它们之间的复杂度,一个类负责一项职责,其逻辑要比负责多个职责的逻辑简单的多;
2.提高类的可读性,对于后期的维护有利;
3.大大的降低了系统变更引起的风险;
设计模式六大原则(二):里氏替换原则
定义:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的程序P在所有对象o1都替换成o2的时候,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。什么意思呢?通俗的讲就是:子类可以扩展父类的功能,但是不能改变父类原有的功能!
还是懵懵懂懂吧!哈哈…举个栗子吧!
问题由来:有一功能P1,有A类完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P的功能是由原有功能P1与新功能P2组成。新功能是由A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。
解决方案:类B继承A时,除添加新的方法完成新功能P2外,尽量不要重写A类的方法,也尽量不要重载父类的这些方法。这就是里氏替换原则!
其实呢,里氏替换原则也是在阐述这样一条规则,就是说尽量不要重写或者重载父类的方法,虽然继承中没有明确的说明,但是如果子类对父类的实现方法任意修改,就会造成整个继承体系的破坏。当然,这也是面向对象继承特征的弊端,带来的是程序的侵入性,大大的降低了程序的可移植性!
设计模式六大原则(三):依赖倒置原则
定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖其抽象;
额,说的什么玩意?我们还是举个例子代码吧!
我们有一个Mother类:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
有个Book类:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
我们调用的代码片段:
- 1
- 2
- 1
- 2
结果应该是:读书!
现在要改需求了,妈妈要读报纸:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
怎么办?妈妈只会读书啊!
我们可以这样改:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
其实依赖倒置原则的核心原则就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。
设计模式六大原则(四):接口隔离原则
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
终于来个比较简单的了,接口隔离也就是对接口的细化分割,降低依赖共同接口类的耦合度!
还是举个例子吧!
类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于A和B来说不是最小接口,则类B和D必须要去实现他们不需要的方法!IReader接口中有三个方法,name(),content(),author(),time(),Book类不需要time,NewsPapers类不需要author(),那我们在实现Book和NewsPapers的时候就出现多余的方法体,怎么解决呢?我们可以把IReader接口分成两个子接口,再对依赖的地方做出修改,这样就做到了分离的目的!
设计模式六大原则(五):迪米特法则
定义:一个对象应该对其它对象保持最少的了解。
类与类之间的关系越密切,耦合度越大,当一个类发生变化的时候,对另一个类的影响也越大!所以需要尽量降低类与类之间的耦合!
设计模式六大原则(六):开闭原则
定义:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。
即当软件的需求发生变化的时候,尽量同扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
OK,就写到这,有理解不对的地方,欢迎大家指正!
每天进步一点点,时间会让你成为巨人!加油!