开闭原则(Open-Closed Principle)与Strategy模式

本文探讨了软件设计中的开闭原则,强调了通过扩展而非修改来适应需求变化的重要性,并介绍了实现这一原则的两种设计模式:模板方法模式和策略模式。以.NET Framework中的策略模式为例,展示了如何通过对ArrayList类进行扩展而不修改其源代码来实现新的排序算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"开闭原则":
"开闭原则"是一种与类设计相关的原则.

"软件实体(类,模块,函数等)应该对扩展开放,而对修改关闭[Martin,p99]".

"开闭原则"有两个重要的方面:
1. "对扩展开放": 当应用程序的需求发生改变,可以通过扩展模块的行为来应对.
2. "对修改关闭": 扩展模块的行为并不会导致模块的源代码或它的二进制代码的修改.

在应用程序中有两种设计模式可以帮助实现"开闭原则": Template Method (模板方法模式)和 Strategy (策略模式). Template Method是通过继承来隐藏算法的细节,而Strategy是通过委托来隐藏算法的细节(通过接口的方式),从而获得"开闭原则"带来的好处.

.NET Framework中的Strategy模式的例子:
通过IComparer接口对ArrayList中的对象排序.默认情况下,ArrayList的Sort方法使用"快速排序"算法对实现了IComparable的每一项进行排序.然而,某些时候需要对列表排序使用不同的情况,所以有一个重载的Sort将IComparer作为参数.如果是默认情况,ArrayList使用IComparer.Compare做比较.如果传入实现了IComparer接口的对象,ArrayList能够实现其它的排序算法而不用关心比较方法的细节.

下面是Strategy设计模式的一个例子:
class CoolComparer : IComparer
{
    
IComparer Members

}



ArrayList items 
= new ArrayList();

items.Add(
"One");
items.Add(
"Two");
items.Add(
"Three");

items.Sort(); 
// Uses IComparable on string object

IComparer myComparer 
= new CoolComparer();
items.Sort(myComparer); 
// Delegate Comparison Method

上面显示如何支持"开闭原则",因为在ArrayList中实现一个新的比较方法来比较对象,而不需要对ArrayList类做修改.此即对修改来说是封闭的.而我们能够传递实现IComparer接口的对象,此即对扩展是开放的.扩展ArrayList只需要编写实现IComparer接口的新代码,而不用修改已有的代码.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值