我眼中设计模式的六大原则

栏目: 后端 · 发布时间: 5年前

内容简介:设计模式有六大设计原则,每种设计模式都都绕不开这六个原则。这个原则讲在类(接口)的设计上,一个类所承担的职责一定要单一。但实际中,职责粒度的划分是很不明确的,没有绝对的到哪一粒度就算是满足单一了。反之,过度的考虑单一职责,会引起类的剧增。所以并不必拘泥于类的单一职责,不过于复杂即可。另外,单一职责也可用与方法设计的考虑,比如一个方法利用传入type加switch的方式,写了大段分支代码,不如拆分方法。

设计模式有六大设计原则,每种 设计模式 都都绕不开这六个原则。

单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

这个原则讲在类(接口)的设计上,一个类所承担的职责一定要单一。但实际中,职责粒度的划分是很不明确的,没有绝对的到哪一粒度就算是满足单一了。反之,过度的考虑单一职责,会引起类的剧增。所以并不必拘泥于类的单一职责,不过于复杂即可。另外,单一职责也可用与方法设计的考虑,比如一个方法利用传入type加switch的方式,写了大段分支代码,不如拆分方法。

里氏替换原则:子类必须能够替代掉父类。

这个原则看起来想当然,实际使用中药避免一个错误,在父类的业务逻辑中用instanceof判断是否满足子类类型。

依赖倒转原则:高层模块不应该依赖低层模块,两者都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

举个实际使用的例,业务层使用底层数据库,如果强依赖于低层实现,那么业务层复用将会十分不便。应该的实现方式是底层用接口实现,上层依赖其接口。典型的例子就是spring+hibernate开发中实现的dao层,而且,hibernate作为orm框架,在努力隔离低层数据库,而spring也用jpa标准,降低对hibernate的耦合,以便能随时替换orm框架。

接口隔离原则:客户端不应该依赖它不需要的接口。

有四层含义

1、接口尽量小,但拆分接口时先满足单一原则,如果已经粒度够小,不必拆分

2、接口要高内聚

3、定制服务

4、接口设计时有限度的,避免过度设计

接口隔离和单一职责全凭经验应用。。。

迪米特法则:最少知识原则。如果两个类不必彼此之间通信,那么这两个类就不应当发生之间的相互作用。

比如A依赖B,B依赖C(A -> B -> C),C的业务逻辑只保留在B中,在A中不应该有C的业务逻辑。这个原则在公司的管理上也是一个道理,经理管理组长,组长管理普通员工。日常各类的各类事务,经理只需要从组长处获取必要信息即可,不需要关心员工的工作细节(特殊事件除外。。),这样就能保证从上到下工作高效,避免过多冗余信息的交换,才是一个健康的组织架构。

开放封闭原则:一个软件实体应该对扩展开放,对修改关闭。

这一点在程序设计中是非常关键的,对于之后可能存在功能扩展的类,做好抽象,设计合理的接口。而类本身的内容尽可能的避免修改,原则是在对类做扩展时,之前依赖此类的地方不需要做任何修改。

即使抛开所有设计模式,能按照上述六大原则进行代码设计开发,代码质量就能得到很好的保证。所有的设计模式不见得一次性都能记住,不用则不熟。但如果能透传理解上面的原则,可能实际写代码中会不自觉就把某一个模式给实现出来了。

设计模式就是一种编程思路,要明白设计模式并不能提高代码效率。曾有大牛提出设计模式是为了解决面向对象的缺陷而存在的,这个观点本人不反驳,但也并不敢苟同好多人认为“设计模式没有存在的必要”。我眼里的设计模式,是 程序员 沟通代码思路的媒介,提高代码可读性与可维护性的工具。如果自己有一天也能达到不自觉就用出了各类复杂的设计模式,到那时,希望自己能在代码中留下“此处用了**模式的思路”,胜过大段的代码注释。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

未来简史

未来简史

[以色列] 尤瓦尔·赫拉利 / 林俊宏 / 中信出版集团 / 2017-2 / 68.00元

进入21世纪后,曾经长期威胁人类生存、发展的瘟疫、饥荒和战争已经被攻克,智人面临着新的待办议题:永生不老、幸福快乐和成为具有“神性”的人类。在解决这些新问题的过程中,科学技术的发展将颠覆我们很多当下认为无需佐证的“常识”,比如人文主义所推崇的自由意志将面临严峻挑战,机器将会代替人类做出更明智的选择。 更重要的,当以大数据、人工智能为代表的科学技术发展的日益成熟,人类将面临着从进化到智人以来z......一起来看看 《未来简史》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具