设计模式六大原则之开闭原则

1.定义:

开闭原则是设计模式里面最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则定义如下:

一个软件实体。如类/模块/函都应该对扩展开放,对修改关闭。

2.为什么要有开闭原则或者说开闭原则的好处具体体现在哪里?

在软件的生命周期内,因为升级和维护或者要增加需求需要对原有的代码进行修改,这时可能会给旧代码引入错误,并且修改完以后要对原有的代码进行重新的测试。也就是说你修改了代码以后,既要实现你现在增加的功能,又要实现你以前的功能。

那么开闭原则的就是解决这个问题的办法:当软件需求变化时,尽量通过扩展软件的行为来实现变化,而不是通过修改现有的代码来实现变化。

3.举例子说明:

我们都知道香港澳门回归有一个伟大的领导人起了重要的作用,那就是我们敬爱的邓小平同志,当时邓小平和英国首相撒切尔夫人谈香港问题的时候,如果要求香港回来之后必须要实现社会主义制度,那么香港回归就困难了,香港的老百姓已经习惯了他们现有的殖民统治制度,突然在整个管理制度上改变,香港的老百姓也不答应。为了香港能顺利的回到祖国的怀抱,邓小平实行一国两制,一个国家两种制度,在一个中国的前提下,国家的主体坚持社会主义制度,香港、澳门保持原有的资本主义制度长期不变。邓小平的这一创举即实现的祖国的统一,大陆的制度又没有改变。这岂不是一个更好的办法。

4.代码例子说明

如果让我们写一个加法程序我们很快就能完成,代码如下: 

static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("请输入数字A:");
                string strNumberA = Console.ReadLine();
                Console.WriteLine("请输入运算符(+):");
                string strOperate = Console.ReadLine();
                Console.WriteLine("请输入数字B:");
                string strNumberB = Console.ReadLine();
                string strResult = "";
                
               strResult = Convert.ToString(Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB));
                        break;
                   
                Console.WriteLine("结果是:"+strResult);
                Console.ReadLine();

            }
            catch (Exception ex)
            {
                Console.WriteLine("您输入的有错"+ex.Message);
                Console.ReadKey();

            }

当我们的需求增加时,需要增加减法,乘法和除法的时候,如果我们在在这个类中写代码,那就修改了原有的代码这就违背了开闭原则:我们知道开闭原则只能扩展,不能修改。那么我们可以扩展一个运算类啊然后让加减乘除子类继承这个运算类。然后客户端类调用这个运算类就可以了。代码如下:

 运算类:Operation

{class  OperationAdd:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }
    class OperationSub:Operation
    {
        public override double GetResult()
        {
           
           {
                double result = 0;
                result = NumberA - NumberB;
                return result;
           }
        }
    }
    class OperationMul : Operation
    {
        public override double GetResult()
        {

            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
    }
    class OperationDiv : Operation
    {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB == 0)
                    throw new Exception("除数不能为0");
                    result =NumberA/NumberB;
                    return result;



        }
        }
    }
    public class Operation
    {
        private double _numberA = 0;
        private double _numberB = 0;
        public double NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }

        }
        public double NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }

        }
        public virtual double GetResult()
        {
            double result = 0;
            return result;

        }
    }

开闭原则,它指导我们如何建立一个稳定,灵活的系统。在软件增加需求时,不去修改原有的代码只是扩展行为来实现变化。

今天就总结到这。如果有不合适的地方,请多多指正。谢谢。

猜你喜欢

转载自blog.csdn.net/zhanduo0118/article/details/84471788
今日推荐