设计模式几个原则的应用--控制开关(C#)

设计可以控制开关的程序,可以控制种类不同的物件,便于增加和复用。

UML图:

TV 和 Light类可以是抽象类或者接口 

第一个类:开关接口类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    interface IsSwitchable
    {
        void TurnOff();
        void Lighting();
        void TurnOn();
        //开关接口
    }

}

接口类包含三个函数:开、关、亮

第二、三个类:抽象函数灯、电视类(灯和电视可以派生出各种类型的灯、电视)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    abstract class Light : IsSwitchable
    {
        public abstract void TurnOff();
        public abstract void TurnOn();
        public abstract void Lighting();
        //抽象类Light
    }

}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    abstract class Tv : IsSwitchable
    {
        public abstract void Lighting();
        public abstract void TurnOff();
        public abstract void TurnOn();
        //抽象类Tv
    }

}

这两个抽象类只声明,并不具体实现,由他们的子类来实现。

第四、五个类:具体灯、电视类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class TubeLight : Light
    {
        public override void TurnOn()
        {
            Console.WriteLine("打开");
        }
        public override void Lighting()
        {
            Console.WriteLine("灯亮了");
        }
        public override void TurnOff()
        {
            Console.WriteLine("关闭");
        }

    }

}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class BulbLight : Light
    {
        public override void TurnOff()
        {
            Console.WriteLine("关闭");
        }

        public override void TurnOn()
        {
            Console.WriteLine("打开");
        }

        public override void Lighting()
        {
            Console.WriteLine("灯亮了");
        }
    }

}

最后一个类:开关控制类(成员是接口对象)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class ToggleSwitch
    {
        protected IsSwitchable Ilight;

        public ToggleSwitch(IsSwitchable ilight)
        {
            this.Ilight = ilight;
        }
        public void makeLight()
        {
            this.Ilight.TurnOn();
            this.Ilight.Lighting();
            this.Ilight.TurnOff();
        }
        //@开关类
//这里也可以写选择灯是开是关的函数
    }

}

然后可以测试一下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            IsSwitchable Tube = new TubeLight();
            Console.WriteLine("创建一个灯管");
            IsSwitchable Bulb = new BulbLight();
            Console.WriteLine("创建一个灯泡");
            ToggleSwitch TogOne = new ToggleSwitch(Tube);
            TogOne.makeLight();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/lanshan1111/article/details/88657548