• 简单实现装饰者模式


    装饰者模式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();
            }

    测试输出:

  • 相关阅读:
    17._4Csharp中正则表达式的匹配
    15.13DataGridView单元格自动填充
    C#安装,启动,停止,卸载Windows服务
    C# 如何判断系统是32位还是64位
    [转]Excel关闭进程
    利用.Net中Process类调用netstat命令来判断计算端口的使用情况
    转:C# 获取指定目录下所有文件信息、移动目录、拷贝目录
    做安装包,安装后自动运行程序
    ...
    SharpZIP Lib
  • 原文地址:https://www.cnblogs.com/detective-blog/p/4977424.html
Copyright © 2020-2023  润新知