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

    测试输出:

  • 相关阅读:
    python list添加元素的几种方法
    Python ---- list和dict遍历
    python 之 collections
    python list 中元素的统计与排序
    pandas dataframe 读取 xlsx 文件
    Python 缓存机制与 functools.lru_cache(zz)
    pip 使用
    python 中的异常处理
    python 时间日期处理
    python read txt file
  • 原文地址:https://www.cnblogs.com/detective-blog/p/4977424.html
Copyright © 2011-2022 走看看