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

    测试输出:

  • 相关阅读:
    60、剑指offer--把二叉树打印成多行
    59、剑指offer--按之字形顺序打印二叉树
    KNN(最近邻算法)
    RBM(受限玻尔兹曼机)
    Denoising Autoencod
    决策树算法
    AdaBoost算法简介
    suricata工作流程简介
    KD tree详解
    tesseract训练新字库
  • 原文地址:https://www.cnblogs.com/detective-blog/p/4977424.html
Copyright © 2011-2022 走看看