zoukankan      html  css  js  c++  java
  • 简单实现装饰者模式

    装饰者模式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.
    ");
            }
            public override void Call()
            {
                Console.Write(name+" can call.
    ");
            }
        }

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

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

    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.
    ");
            }
        }

    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.
    ");
            }
        }

    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+"
    ");
    
                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 + "
    ");
    
                Camera c2 = new Camera(gps2);
                c2.Load_Video();
    
                Console.Read();
            }

    测试输出:

  • 相关阅读:
    IE7下总提示" 缺少标识符、字符串或数字"
    #pragma 用法
    破解win7开机密码
    教你怎么样设计一块好的PCB板精华教程
    Object reference not set to an instance of an object. 'Infinity' is not a valid value for property 'width'.
    验证时出错,HRESULT = '8000000A'
    WIN7打补丁后VS2012出现版本不兼容
    VS的快捷键
    WPF学习记录1:ListView的一个模板
    使用Xposed Installer实现Android Hook
  • 原文地址:https://www.cnblogs.com/detective-blog/p/4977424.html
Copyright © 2011-2022 走看看