就是对扩展开放,对修改关闭。当应用需求改变时,不应该就修改原来的代码,而应该通过增加扩展的方式来完成对需求的改变。
对应的代码技术就是接口类型的,通过增加类来实现接口完成不同需求的实现。
例如:一个做一个运算类
//运算方法接口 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(); } }