开闭原则

就是对扩展开放,对修改关闭。当应用需求改变时,不应该就修改原来的代码,而应该通过增加扩展的方式来完成对需求的改变。

对应的代码技术就是接口类型的,通过增加类来实现接口完成不同需求的实现。


例如:一个做一个运算类

//运算方法接口
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();
    }
}

首页 我的博客
粤ICP备17103704号