微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设计模式学习笔记——单一职责原则

前言:

很久没有写博客了,最近学习了很多东西,没有来得及总结,一直不写博客,慢慢的就有些懈怠了,现在正在学习设计模式,学习了一半,感觉设计模式就是将我混乱的程序让它变得思路清晰,虽然我还没达到这样的水平,但是这个是在于长久的实践练习,目前学习设计模式旨在认识一下都有哪些模式,体会其精髓,还得等到以后项目做多了,才能体会。我用的书是秦小波写的《设计模式之禅》,在图书馆翻到的书,喜欢这本书的风格,没有大量枯燥的语句,相反读这本书仿佛在和作者聊天,幽风趣,而且讲解的深浅得当,书里举的例子给我一个感觉:生活中处处是对象啊……

打算是每天一个设计模式,包括书中对每个设计模式的扩展应用,现在先从6大原则入手,设计模式关键是理解其中的思想,要会画各种类图,编写代码是其次,所以督促自己不能偷懒啊,在这里记下笔记,希望以后能够用到。设计模式的学习,可能要用一个多月的时间,唉,真是有点对不住GOF,这么经典的模式,竟然要一天解决一个,放心,现在我只是粗略,但是对于设计模式的学习体会,绝对不会止步于此!


今天就先来看设计模式的第一个原则:单一职责原则(Single Responsibility Principle),简称SRP

单一职责原则定义:应该有且仅有一个原因引起类的变更,即一个接口或是类只有一个职责,它就负责一件事情。

先来看一个糟糕的设计

可以看到IPhone这个接口有两个职责,一个是协议管理,一个是数据传送。dial()和hangup()两个方法实现的是协议管理,而chat()实现的是数据传送。如果是这样设计的话,当协议变化或者是数据传送的变化,都会影响到这个接口,那么就增加了程序的风险,显然不是一种好的设计。这个时候,我们就看到单一职责的好处了,我们可以把这个接口拆成两个接口,让一个接口负责协议管理,另一个接口负责数据传送,这样当一个职责发生变化时,就不会影响到另一个增加了程序的健壮性。来看一下改进之后的类图:


一个类实现了两个接口,把两个职责融合在一个类中。虽然Phone这个类有两个职责,但是我们是面向接口编程,对外公布的是接口而不是实现类。单一职责不仅适用于接口和类,同样适用于方法,即一个方法尽量做一件事情。


小结:

单一职责比较难实现,因为“职责”没有一个量化的标准,到底一个类负责哪些职责?职责怎么细化?这些都要从实际出发,不能生搬硬套原则,原则是死的,就像毛爷爷当年在中国应用马克思主义一样,不能生搬硬套,要在我们现实情况的基础上去应用原则。

对于单一职责原则,作者的建议是:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

原文地址:https://www.jb51.cc/javaschema/286804.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐