没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
http://blog.csdn.net/lovelion/article/details/7536532
对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如
何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,
可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升
一个软件结构的设计水平。
面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中
总结出的指导性原则。面向对象设计原则也是我们用于评价一个设计模式的使用效果的重要指标之一,在设计
模式的学习中,大家经常会看到诸如“XXX 模式符合 XXX 原则”、“XXX 模式违反了 XXX 原则”这样的语句。
最常见的 7 种面向对象设计原则如下表所示:
表 1 7 种常用的面向对象设计原则
设计原则名称 定••义 使用频率
单一职责原则
(Single Responsibility Principle,
SRP)
一个类只负责一个功能领域中的相应职责
★★★★☆
开闭原则
(Open-Closed Principle, OCP)
软件实体应对扩展开放,而对修改关闭
★★★★★
里氏代换原则
(Liskov Substitution Principle, LSP)
所有引用基类对象的地方能够透明地使用其子
类的对象
★★★★★
依赖倒转原则
(Dependence Inversion Principle,
DIP)
抽象不应该依赖于细节,细节应该依赖于抽象
★★★★★
接口隔离原则
(Interface Segregation Principle,
ISP)
使用多个专门的接口,而不使用单一的总接口
★★☆☆☆
合成复用原则
(Composite Reuse Principle, CRP)
尽量使用对象组合,而不是继承来达到复用的
目的
★★★★☆
迪米特法则
(Law of Demeter, LoD)
一个软件实体应当尽可能少地与其他实体发生
相互作用
★★★☆☆
hp://blog.csdn.net/lovelion/arcle/details/7536542
面向对象设计原则之单一职责原则
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下:
单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而
言,应该只有一个引起它变化的原因。
单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的
可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责
的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职
责总是同时发生改变则可将它们封装在同一类中。
单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将
其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。
下面通过一个简单实例来进一步分析单一职责原则:
Sunny 软件公司开发人员针对某 CRM(Customer Relationship Management,客户关系管理)系统中客户信息图形统计模块提出
了如图 1 所示初始设计方案:
图 1初始设计方案结构图
在图 1 中,CustomerDataChart 类中的方法说明如下:getConnection()方法用于连接数据库,findCustomers()用于查询所有的客户
信息,createChart()用于创建图表,displayChart()用于显示图表。
现使用单一职责原则对其进行重构。
在图 1 中,CustomerDataChart 类承担了太多的职责,既包含与数据库相关的方法,又包含与图表生成和显示相关的方法。
如果在其他类中也需要连接数据库或者使用 findCustomers()方法查询客户信息,则难以实现代码的重用。无论是修改数据库连
接方式还是修改图表显示方式都需要修改该类,它不止一个引起它变化的原因,违背了单一职责原则。因此需要对该类进行拆
分,使其满足单一职责原则,类 CustomerDataChart 可拆分为如下三个类:
(1) DBUtil:负责连接数据库,包含数据库连接方法 getConnection();
(2) CustomerDAO:负责操作数据库中的 Customer 表,包含对 Customer 表的增删改查等方法,如 findCustomers();
(3) CustomerDataChart:负责图表的生成和显示,包含方法 createChart()和 displayChart()。
使用单一职责原则重构后的结构如图 2 所示:
hp://blog.csdn.net/lovelion/arcle/details/7537584
面向对象设计原则之开闭原则
开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。开闭原则由 Bertrand Meyer 于 1988 年提
出,其定义如下:
开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的
情况下进行扩展。
在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。
任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需求时,我
们应该尽量保证系统的设计框架是稳定的。如果一个软件设计符合开闭原则,那么可以非常方便地对系统进行扩展,而且在扩
展时无须修改现有代码,使得软件系统在拥有适应性和灵活性的同时具备较好的稳定性和延续性。随着软件规模越来越大,软
件寿命越来越长,软件维护成本越来越高,设计满足开闭原则的软件系统也变得越来越重要。
为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在 Java、C#等编程语言中,可以为系统定义
一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。在很多面向对象编程语言中都提供了接口、抽象类等
机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何改动,
只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。
Sunny 软件公司开发的 CRM 系统可以显示各种类型的图表,如饼状图和柱状图等,为了支持多种图表显示方式,原始设计
方案如图 1 所示:
图 1初始设计方案结构图
在 ChartDisplay 类的 display()方法中存在如下代码片段:
[java]view plain copy
1. ......
2. if(type.equals("pie")){
3. PieChartchart=newPieChart();
4. chart.display();
5. }
6. elseif(type.equals("bar")){
7. BarChartchart=newBarChart();
8. chart.display();
9. }
10. ......
在该代码中,如果需要增加一个新的图表类,如折线图 LineChart,则需要修改 ChartDisplay 类的 display()方法的源代码,
增加新的判断逻辑,违反了开闭原则。
现对该系统进行重构,使之符合开闭原则。
剩余14页未读,继续阅读
资源评论
DreamMakers
- 粉丝: 702
- 资源: 81
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功