就是对扩展开放,对修改关闭。当应用需求改变时,不应该就修改原来的代码,而应该通过增加扩展的方式来完成对需求的改变。
对应的代码技术就是接口类型的,通过增加类来实现接口完成不同需求的实现。
例如:一个做一个运算类
//运算方法接口
interface ICal
{
int Cal(int a, int b);
}//运算加法类
class Add : ICal
{
public int Cal(int a, int b)
{
return a + b;
}
}//运算类
class Cal
{
//默认使用加法
private ICal calCode = new Add();
//用来设置使用的运算方式
public void SetCalCode(ICal code)
{
calCode = code;
}
public int DoCal(int a, int b)
{
return calCode.Cal(a, b);
}
}这里默认使用的是加法,如果此时需要使用的是乘法,此时不应该对原来代码进行修改,而是进行扩展
//新加乘法运算类
class Mul : ICal
{
public int Cal(int a, int b)
{
return a * b;
}
}客户端(通过某种方式,配置,注入等)切换运算类
class Program
{
static void Main(string[] args)
{
Cal cal = new Cal();
int r1 = cal.DoCal(10, 20);
Console.WriteLine(r1);//30
//这里只是示范,应该在第三方地方设置的,然后客户端类就不需要做任何改动了
cal.SetCalCode(new Mul());
int r2 = cal.DoCal(10, 20);
Console.WriteLine(r2);//200
Console.ReadKey();
}
}