c#设计模式之开放封闭原则

设计模式之开放封闭原则

1、定义

软件实体(类,函数,模块等)应该可以扩展,但是不可以修改。

2、两个特性

1.对于扩展是开放的:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
2.对于修改是封闭的:意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

3、何时应对变化

绝对的对修改关闭是不可能的,无论模块多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对那种变化封闭做出选择。他必须猜测数最有可能发生变化的类,然后构造抽象来隔离变化。

4、实例

增加开方和求绝对值功能,只需要在之前的代码基础上添加开方与求绝对值的类,而不需要更改原来代码:
抽象父类:

 //一个抽象的计算父类
        public  abstract class  Operation
            {

            public double  NumberA { get; set; }


            public abstract double GetResult();

        }

添加开方与求绝对值子类:

  //一个开方的子类
        public class Sqrt : Operation
        {

            public override double GetResult()
            {
                return Math.Sqrt(NumberA);

            }
        }

        //一个求绝对值的子类
        public class Abs : Operation
        {
            public override double GetResult()
            {
                return Math.Abs(NumberA);
            }
        }

在原来的操作工厂添加这两个case即可:

   //计算工厂类
        public static class OperationFactory
        {
            public static Operation CreateOperate(string operatestring)
            {
                Operation oper = null;
                switch (operatestring)
                {
                //原来基础上新增
                    case "sqrt":
                        oper = new Sqrt();
                        break;
                    case "abs":
                        oper = new Abs();
                        break;


                }
                return oper;

            }
        }

5、UML图

这里写图片描述

6、源代码

开放封闭原则示例源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值