简单实现装饰者模式

装饰者模式UML图:

MobilePhone(抽象手机类)

    abstract class Mobilephone
    {
        public string name;
        public abstract void SendMessage();
        public abstract void Call();
    }

 

MiPhone(具体手机,小米手机)

    class MiPhone:Mobilephone
    {
        public MiPhone()
        {
            name = "Mi Mobilephone";
        }
        public override void SendMessage()
        {
            Console.Write(name+" can send messages.\n");
        }
        public override void Call()
        {
            Console.Write(name+" can call.\n");
        }
    }

 

ApplePhone(具体手机,苹果手机)

    class ApplePhone:Mobilephone
    {
        public ApplePhone()
        {
            name = "Apple Mobilephone";
        }
        public override void SendMessage()
        {
            Console.Write(name+" can send messages.\n");
        }
        public override void Call()
        {
            Console.Write(name + " can call.\n");
        }
    }

 

Decarator(抽象装饰类,继承了抽象手机类)

    abstract class Decarator : Mobilephone
    {
        protected Mobilephone mp;
        
        public Decarator(Mobilephone mp)
        {
            this.mp = mp;
            name = mp.name;
        }
        public override void SendMessage()
        {
            if(mp!=null)
                mp.SendMessage();  
        }
        public override void Call()
        {
            if (mp != null)
                mp.Call();
        }
    }

 

Bluetooth(具体装饰类)

    class Bluetooth:Decarator
    {
        public Bluetooth(Mobilephone mp):base(mp)
        {
            
        }
        public void Connect()
        {
            Console.Write(name+" add Blutooth function.\n");
        }
    }

 

GPS(具体装饰类)

    class GPS:Decarator
    {
        public GPS(Mobilephone mobilrphone):base(mobilrphone)
        {

        }
        public string Location;
    }

 

Camera(具体装饰类)

    class Camera:Decarator
    {
        public Camera(Mobilephone mp):base(mp)
        {

        }
        public void Load_Video()
        {
            Console.Write(name+" add Camera function.\n");
        }
    }

 

Client(测试类)

    class Client
    {
        static void Main(string[] args)
        {
            MiPhone mp = new MiPhone();
            ApplePhone ap = new ApplePhone();
            //小米手机装饰
            Bluetooth d1 =new Bluetooth(mp);
            d1.Connect();

            GPS gps1 = new GPS(d1);
            gps1.Location="10.22";
            Console.Write("GPS定位:"+gps1.Location+"\n");

            Camera c1 = new Camera(gps1);
            c1.Load_Video();
            //苹果手机装饰
            Bluetooth d2 = new Bluetooth(ap);
            d2.Connect();

            GPS gps2 = new GPS(d2);
            gps2.Location = "10.22";
            Console.Write("GPS定位:" + gps2.Location + "\n");

            Camera c2 = new Camera(gps2);
            c2.Load_Video();

            Console.Read();
        }

测试输出:

posted on 2015-11-19 13:49  体育委员  阅读(197)  评论(0编辑  收藏  举报