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

来源:互联网 发布:sh linux 编辑:程序博客网 时间:2024/04/30 02:08

单一职责原则

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

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

例子:

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




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

改进:





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

0 0
原创粉丝点击