您的位置 首页 java

「JAVA中级工程师」之设计模式6大原则

也许刚接触java时,你就已经听过设计模式这个概念了,因为设计模式本质上来说,它不是一种技术,它是一种哲学开发思维,学习设计模式的过程中也许很轻松,但难就难在你即便熟悉这个模式,你却不知道怎么用它,如何在你的代码中使用它。

所以在我们开始学习具体的设计模式之前,我们得先明白设计模式存在的意义?它所解决的是什么问题?为什么它能解决这些问题?明白这些问题,也许你学起来就会得心应手了。

设计模式的目标是为了安全,健壮,高复用,低耦合的维护或扩展大型架构系统的代码

1、开闭原则(Open Close Principle)

开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

示例 :假设我们开发了一个计算器,实现了加减乘除四个算法,计算器使用一段时间之后,客户想要新增平方的算法,这个时候也许你会直接在算法类中添加一个if来做判断,这个时候出现了一个问题,你只是因为要新增功能而修改了原本运行正常的代码,这可能会带来程序异常的风险,且随着功能的增加你的算法类代码会积累越来越多不易维护,不易阅读。

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

示例 :假设我们实现了一个跑步的方法,这个方法参数是某个人(比如小明,小红,小黑),由于方法参数和传递进来的参数类型要一致,所以参数如何设置为小明,那当你传小红时就会报错,所以你就得写三个相似的方法来对应三个参数。这显得代码特别冗余,阅读效率低下,维护难度十分高。这个时候我们选择修改小红,小明,小黑继承于Person类,Person是父类,子类继承之后也拥有父类的功能,且当参数为Person类时,该方法可以传递Person的任一子类,这就实现了同一方法传递不同子类实现不同功能。

3、依赖倒转原则(Dependence Inversion Principle)

这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

示例 :依赖倒转与里氏替换类似,很多时候,父类的功能并不能满足子类,好比孩子会开车,父亲并不一定也会开车,这时便可以用接口形式来补充。同一个参数传递不同实现类来实现同方法不同功能。

4、接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

示例 :假设我们现在要操作一个文件的增删改查,通常情况下你会把增删改查四个方法写在同一个接口内,实现类就需要四个方法都实现,高层模块在调用实现类的时候,会发现四个功能都可以调用,但用户也许只有查询的需求而已,或者只有查询的权限而已,代码污染为开发埋下漏洞。所以我们推荐将四个方法分别放在不同接口中,以实现不同接口来实现不同方法。低耦合开发。

5、迪米特法则,又称最少知道原则(Demeter Principle)

最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。迪米特法则在运用过程中算是比较难的,哲学思想比较深刻,在我们生活中应该处处见到迪米特思想。迪米特法则告诉我们一个类只和朋友类交流,朋友类的定义是这样的: 出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类

示例 :比如说打电话我们需要拨号,号码会发给基站,基站再拨给对方手机,这个号码提高到顶层模块来初始化就遵循了迪米特。这个号码使得我的手机和对方的手机是独立的,在不拨号的情况下,两部手机是没有任何联系,互不影响的。若是不遵循迪米特法则,两部手机一一对应,那我有三个朋友我就要买三部手机,这无法高效的复用手机,且由于手机间耦合太严重,对方手机坏了,我的手机也得换。

6、合成复用原则(Composite Reuse Principle)

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

示例 :猫肯定是继承自动物类,但是猫分白猫,黑猫,黄猫,这个时候我们是否选择白猫继承于猫呢?这样便会导致特别多的猫类,复用性和维护性极差,因为猫的属性是一样的,只是颜色不一样而已,我们可以定义一个颜色类,在动物类中引入颜色类,极大减少子类的创建。

关注小编,带你了解更多JAVA知识。祝大家面试顺利!

文章来源:智云一二三科技

文章标题:「JAVA中级工程师」之设计模式6大原则

文章地址:https://www.zhihuclub.com/176576.shtml

关于作者: 智云科技

热门文章

网站地图