zoukankan      html  css  js  c++  java
  • M_K3之装饰者模式

    分析:抽象组件——具体组件——抽象装饰类_具体装饰类

    相关UML图:

    类总括:

    相关代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace M_K3
    {
        class Program
        {
            static void Main(string[] args)
            {
                char i;
                MobilePhone apple = new Apple();
                apple.SendMessage();
                apple.Call();
    
                Console.WriteLine("--------------------------------------");
                Console.WriteLine(" Please select new function.");
                Console.WriteLine(" Bluetooth----1.");
                Console.WriteLine(" GPS----2.");
                Console.WriteLine(" Camera----3.");
                Console.WriteLine(" End----0.");
                Console.WriteLine("---------------------------");
                Console.WriteLine("Input the choice:");
                
                while (true)
                {i = (char)Console.Read();
                    if (i == '0')
                    {
                        break;
                    }
                    if (i == '1')
                    {
                        Bluetooth bluethooh = new Bluetooth();
                        bluethooh.Decorate(apple);
                        bluethooh.SendMessage();
                    }
                    if (i == '2')
                    {
                        GPS gps = new GPS();
                        gps.Decorate(apple);
                        gps.SendMessage();
                    }
                    if (i == '3')
                    {
                        Camera camera = new Camera();
                        camera.Decorate(apple);
                        camera.SendMessage();
                    }
                }
            }
        }
    }
    abstract class MobilePhone
    {
        public MobilePhone() { }
        public abstract void SendMessage();
        public abstract void Call();
        public abstract void Hello();
    }
    class Apple : MobilePhone
    {
        public Apple() : base(){ }
    
        public override void SendMessage()
        {
            Console.WriteLine("Now,send message...Hello,I am Apple.");
        }
    
        public override void Call()
        {
            Console.WriteLine("Now,calling...Moxi Moxi,I'am Apple.");
        }
        public override void Hello()
        {
            Console.WriteLine("Hello,there is Apple.");
        }
    }
    class Mi : MobilePhone
    {
        public Mi() : base() { }
    
        public override void SendMessage()
        {
            Console.WriteLine("Now,send message...Hello,I am Mi.");
        }
    
        public override void Call()
        {
            Console.WriteLine("Now,calling...Moxi Moxi,I'am Mi.");
        }
        public override void Hello()
        {
            Console.WriteLine("Hello,there is Mi.");
        }
    }
    
    abstract class Add : MobilePhone
    {
        private MobilePhone _mobilephone;
    
        public Add() : base() { }
    
        public void Decorate(MobilePhone mobilephone)
        {
            _mobilephone = mobilephone;
        }
    
        public override void SendMessage()
        {
            _mobilephone.SendMessage();
        }
    
        public override void Call()
        {
            _mobilephone.Call();
        }
        public override void Hello()
        {
            _mobilephone.Hello();
        }
    }
    
    class Bluetooth : Add
    {
        public Bluetooth() : base() { }
    
        public override void SendMessage()
        {
            base.Hello();
            Connect();
        }
    
        public void Connect()
        {
            Console.WriteLine("Initate Bluetooth of phone,and connect...");
        }
    }
    
    class GPS : Add
    {
        public GPS() : base() { }
    
        public override void SendMessage()
        {
            base.Hello();
            Location();
        }
    
        public void Location()
        {
            Console.WriteLine("Now,open the GPS.Now,you are at...");
        }
    }
    
    class Camera : Add
    {
        public Camera() : base() { }
    
        public override void SendMessage()
        {
            base.Hello();
            Cansee();
        }
    
        public void Cansee()
        {
            Console.WriteLine("Now,Camera open.Now,You can now open video calls...");
        }
    }

    运行结果:

    优点:

    1. 满足OCP原则;

    2.可随意组合,改变建造者模式固定组合的情况,更具灵活性。

  • 相关阅读:
    安全机制
    Service
    ubuntu 16.4 安装配置IK6.3.2
    ubuntu openstack windows 镜像制作
    openstack RuntimeError: Unable to create a new session key. It is likely that the cache
    千帆过尽,野草依然
    shiro无法进入授权的方法org.crazycake.shiro.exception.PrincipalInstanceException: class java.util.HashMap must has getter for field: id
    绝望中的希望
    shrio中去掉 login;JSESSIONID
    method 'redisConnectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError
  • 原文地址:https://www.cnblogs.com/Elix-kakulo/p/5070673.html
Copyright © 2011-2022 走看看