大话设计模式六原则专场一

前端之家收集整理的这篇文章主要介绍了大话设计模式六原则专场一前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

  有时我们会听到人家讲:某某怎样做无所谓,只要别触碰到我的原则(底线)就行。当我看完大话设计模式总结六原则的时候,发现这句话就是设计模式的一个映射,设计原则就是设计模式模式的底线,是很有必要遵守的,下面就来详解“底线”:

  首先,盗用郑浩师父一张图,原文链接【大话一角】——六兄弟



单一职责原则

含义:就一个类而言,应该仅有一个引起他变化的原因,此原则的核心就是解耦和增强内聚性。

判断:如何判断职责是否应该分离呢?如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多余一个的职责,此时就需要考虑职责分离,将不同的职责封装到不同的类或模块中。

看图说话:感觉单一职责模式的前提是“总”,然后再“分”,即总分关系,用单一职责模式来形容这个原则突出了“分”,隐藏了“总”。


我的理解:拿一个公司的运作举例吧,每个部门负责自己分内工作,各司其职,即保持良好的内聚性,各个部门之间的工作不冲突,只会协调合作,最后汇总起来的工作结果就是预期的目标。


开放—封闭原则

含义:软件实体(类、模块、函数等)可以扩展,但是不可以修改

看图说话


  上图所示关系若是想增加一个减法类,还需要动已经封装好的加法类,这样就违反了开闭原则,所以,我们就按照下图所示,用抽象来隔离以后发成的同类变化,这样的话,要是需要增加一个减法类,只需要增加运算类的子类就可以了~


我的理解:这个原则很像是“一国两制”,坚持一个中国的原则,大陆坚持原有的社会主义制度,而香港和澳门坚持原有的资本主义制度,可增加制度,但是不能修改制度。


依赖倒转原则

含义:A.高层模块不应该依赖低层模块,两个都应该依赖抽象
B.抽象不应该依赖细节,细节应该依赖抽象

理解含义:高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。那什么是抽象,什么又是细节呢?在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化,也就是可以加上一个关键字new产生一个对象。【更加精简的定义就是“面向接口编程”——OOD(Object-Oriented Design,面向对象设计)的精髓之一)

判定:程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化的设计。


“倒置”一词:到底什么是“倒置”呢?我们先说“正置”是什么意思,依赖正置就是类间的依赖是实实在在的实现类间的依赖,也就是面向实现编程,这也是正常人的思维方式,我要开奔驰车就依赖奔驰车,我要使用笔记本电脑就直接依赖笔记本电脑,而编写程序需要的是对现实世界的事物进行抽象,抽象的结果就是有了抽象类和接口,然后我们根据系统设计的需要产生了抽象间的依赖,代替了人们传统思维中的事物间的依赖,“倒置”就是从这里产生的。


优势:可以减少类间的耦合性,提高系统的稳定性,减少并行开发引起的风险,提高代码的可读性和可维护性。

反证法说明优势:若是不使用依赖倒置原则,所有的开发工作都是“单线程”的,甲做完,乙再做,然后是丙继续…,这在90年代“个人英雄主义”编程模式中还是比较适用的,一个人完成所有的代码工作,但在现在的大中型项目中已经是完全不能胜任了,一个项目是一个团队的协作结果,一个“英雄”再厉害也不可能了解所有的业务和所有的技术,要协作就要并行开发,要并行开发就要解决模块之间的项目依赖关系,那然后呢?依赖倒置原则就隆重出场了!


看图说话

(1)建立两个接口:IDriver和ICar,分别定义了司机和汽车的各个职能,司机就是驾驶汽车,必须实现drive()方法

(2)在IDriver中,通过传入ICar接口实现了抽象之间的依赖关系,Driver实现类也传入了ICar接口,至于到底是哪个型号的Car需要在高层模块中声明;

(3)在业务场景中,我们贯彻“抽象不应该依赖细节”,也就是我们认为抽象(ICar接口)不依赖BMW和Benz两个实现类(细节),因此我们在高层次的模块中应用都是抽象;


我的理解:依赖倒置原则在我看来就是让两个需要产生联系的个体间接联系,通过桥梁(接口)减少直接的依赖,就像是上图体现的人和车,人只要有了驾照,开什么车都可以,而不是有了驾照,只能开某一个牌子或是类型的车,那个驾照就像是接口,他能让人和任何车产生驾驶关系。所以,依赖倒置中的“倒置”一词在我看来理解为“弱化”更合适~


  结束语:总结的过程中觉得大化设计模式越来越有意思了,总是能引起思维的发散,思维发散的时候,脑海中的故事比书中的还要精彩!

  理解不当之处还望斧正~

原文链接:https://www.f2er.com/javaschema/284221.html

猜你在找的设计模式相关文章