c#六大设计原则(以仪器代码为例)

[有格式的原文请到https://www.cnc6.cn/c六大设计原则/文末下载]

 

软件设计原则常见的有6大原则,分别为:

①单一职责原则;

②开闭原则;

③依赖倒置原则;

④里氏替换原则;

⑤接口隔离原则;

⑥迪米特法则。

使用C#编程方式,并结合仪器(Instrument)编程,对以上设计原则进行讲解。

一、单一职责原则

简述:类职责要单一,不能有多个职责,具有多个职责的类要进行拆分,形成单一职责的类。

C#代码如下:

    class DCPowerSupply

    {

        public void On() { }

        public void Off() { }

        public double Voltage { set; get; }

        public double Current { set; get; }

 

        public void Record(string content)

        {

            //记录操作

        }

}

以上代码中,函数Off、On、Voltage、Current都是属于DCPowerSupply类的职责,但函数Record并不属于DCPowerSupply的职责,因此,需要将Record函数重新形成一个新类,并应用到该类中,新修改的C#代码如下:

    class DCPowerSupply

    {

        public void On() { }

        public void Off() { }

        public double Voltage { set; get; }

        public double Current { set; get; }

    }

 

 

    class Log

    {

        public void Record(string content)

        {

//记录操作

        }

}

客户端代码如下:

    class Program

    {

        static void Main(string[] args)

        {

            DCPowerSupply dcPowerSupply = new DCPowerSupply();

            dcPowerSupply.Voltage = 5;

            dcPowerSupply.On();

            Log log = new Log();

            log.Record($"DCPowerSupply:{dcPowerSupply.Voltage},On");

        }

 }

从以上代码可以看出,原本耦合性很强的DCPowerSupply中的函数Record,已经从该类中进行解耦,形成松耦合的代码,复用性更强。

二、开闭原则

简述:对类的操作,拓展的要开放,修改的要关闭,类一旦写好并运行OK,就不要轻易去变动它,利用面向对象编程的继承特性,可以很好地对所需要增加的功能进行拓展。

C#代码如下:

    class ACPowerSupply

    {

        public void On() { }

        public void Off() { }

        public double Voltage { set; get; }

        public double Current { set; get; }

}

现在需要在ACPowerSupply类加入测量功率因素(PowerFactor)的功能,如果像这样修改ACPowerSupply类,C#代码如下:

    class ACPowerSupply

    {

        public void On() { }

        public void Off() { }

        public double Voltage { set; get; }

        public double Current { set; get; }

        public double PowerFactor { set; get; }

    }

那就会违背了开闭原则,因ACPowerSupply类已经写好,如果要增加功能,可以新编写一个名为ACPowerSupplyEx的类,继承自ACPowerSupply,并在其中加入PowerFactor的功能即可。

C#代码如下:

    class ACPowerSupplyEx:ACPowerSupply

    {

        public double PowerFactor { set; get; }

    }

三、依赖倒置原则

简述:抽象不依赖于具体细节,具体细节依赖抽象,要面向抽象编程,不要面向实现编程。说的简单点,无论是变量声明、返回值、还是参数,其类型都是抽象的,而不是具体的。

鉴于以上特点:

①每个类尽量继承自接口或抽象类、或两者的结合体;

②每个类不应该从具体类派生;

③由于有使用继承,尽量参照里氏替换原则(以下第四点所述)。

C#代码如下:

    class PowerSupply

    {

        public void On() { }

        public void Off() { }

        public double Voltage { set; get; }

        public double Current { set; get; }

    }

 

    class DCPowerSupply: PowerSupply

    {

        public double Power { set; get; }

    }

 

    class ACPowerSupply: PowerSupply

    {

        public double PowerFactor { set; get; }

}

 

    class PowerSupplySeller

    {

        public void Sell(ACPowerSupply powerSupply)

        {

            //AC电源

        }

        public void Sell(DCPowerSupply powerSupply)

        {

            //DC电源

        }

 }

 

客户端代码如下:

    class Program

    {

        static void Main(string[] args)

        {

            PowerSupplySeller seller = new PowerSupplySeller();

            seller.Sell(new ACPowerSupply());

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfywf.html