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();
            }

    测试输出:

  • 相关阅读:
    gitlab 本地 定时备份
    centos 7 部署 汉化版 gitlab
    ELK开机启动 service文件内容
    通过 kms 激活 office 2016
    让 kibana 后台启动的方案
    centos7 yum 安装 redis
    域账户登录时提示“你的账户配置不允许使用这台电脑。请试一下其他电脑” 解决方案
    gitlab 接入 openldap、AD
    VS访问不到TFS、VS连接TFS报TF30063
    php--纯静态和伪静态的区别与关系
  • 原文地址:https://www.cnblogs.com/detective-blog/p/4977424.html
Copyright © 2011-2022 走看看