"开闭原则":
"开闭原则"是一种与类设计相关的原则.
"软件实体(类,模块,函数等)应该对扩展开放,而对修改关闭[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接口的新代码,而不用修改已有的代码.
"开闭原则"是一种与类设计相关的原则.
"软件实体(类,模块,函数等)应该对扩展开放,而对修改关闭[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设计模式的一个例子:

















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