设计模式基础——面向对象设计原则(二)

本文介绍单一职责原则,强调一个类只负责一项职责的重要性。通过试卷自动生成系统的案例,展示如何通过解耦职责来提高代码的复用性和维护性。

单一职责原则

面向对象设计原则简介:http://blog.youkuaiyun.com/memphychan/article/details/50321365

一个类(或者模块、方法)所承担的责任越多,其被复用的机会就越低。职责承担过多,这些职责就越容易耦合在一起,但一个职责改变的时候,往往会影响其他职责,造成脆弱的设计。
要在开发中实施单一职责原则,则必须要求我们理清职责的种类与归属,写出高聚合,低耦合的代码。其中一条技巧是,将不同的职责(即引起变化的原因)封装在不同的类中,如果多个职责总是同时发生改变,则可以将这些职责封装到同一个类中。

例子:

颜莞璐公司需要开发一个试卷自动生成系统(PaperGeneratingSystem),该系统从xml文件中读入试题,并存储到数据库中,用户可以根据需求动态生成试卷。
颜莞璐一开始的设计是这样的:




readXMLFile方法负责读入xml文件并保存在数据库中,genneratePaper方法负责根据需求从数据库中取出试题并自动生成试卷,getConnection方法负责连接数据库。
在本例中,PaperGeneratingSystem承担了太多的职责,既包括数据库相关的方法,又包括xml文件的读入、解析以及试卷的自动生成。readXMLFile既要读入xml文件,还需要将解析结果保存在数据库中。generatePaper既要负责从数据库取出试题,又要生成试卷。
上述设计导致的结果就是职责的耦合,大大降低了类(或方法)的可复用性。

改进:





改进之后,将数据库连接的职责封装在DBUtil中,将保存、取得试题的职责封装在QuestionDao中,将xml文件解析的职责封装在XMLReader中,PaperGeneratingSystem负责解析试题、生成试卷。上述几个类各施其职,大大降低了原本系统的职责耦合,并且高内聚、低耦合的DBUtil、QuestionDao、XMLReader可以轻易地被其他有需要的类复用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值