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

    /// <summary>
        /// 手机抽象类,即装饰者模式中的抽象组件类
        /// </summary>
        public abstract class Phone
        {
            public abstract void Print();
        }
    
        /// <summary>
        /// 苹果手机,即装饰着模式中的具体组件类
        /// </summary>
        public class ApplePhone:Phone
        {
            /// <summary>
            /// 重写基类方法
            /// </summary>
            public override void Print()
            {
                Console.WriteLine("开始执行具体的对象——苹果手机");
            }
        }
    
        /// <summary>
        /// 装饰抽象类,要让装饰完全取代抽象组件,所以必须继承自Photo
        /// </summary>
        public abstract class Decorator:Phone
        {
            private Phone phone;
    
            public Decorator(Phone p)
            {
                this.phone = p;
            }
    
            public override void Print()
            {
                if (phone != null)
                {
                    phone.Print();
                }
            }
        }
    
        /// <summary>
        /// 贴膜,即具体装饰者
        /// </summary>
        public class Sticker : Decorator
        {
            public Sticker(Phone p)
                : base(p)
            { 
            }
    
            public override void Print()
            {
                base.Print();
    
                // 添加新的行为
                AddSticker();      
            }
    
            /// <summary>
            /// 新的行为方法
            /// </summary>
            public void AddSticker()
            {
                Console.WriteLine("现在苹果手机有贴膜了");
            }
        }
    
        /// <summary>
        /// 手机挂件
        /// </summary>
        public class Accessories : Decorator
        {
            public Accessories(Phone p)
                : base(p)
            {
            }
    
            public override void Print()
            {
                base.Print();
    
                // 添加新的行为
                AddAccessories();          
            }
    
            /// <summary>
            /// 新的行为方法
            /// </summary>
            public void AddAccessories()
            {
                Console.WriteLine("现在苹果手机有漂亮的挂件了");
            }
        }
    class Customer
        {
            static void Main(string[] args)
            {
                // 我买了个苹果手机
                Phone phone = new ApplePhone();
    
                // 现在想贴膜了
                Decorator applePhoneWithSticker = new Sticker(phone);
                // 扩展贴膜行为
                applePhoneWithSticker.Print();
                Console.WriteLine("----------------------
    ");
    
                // 现在我想有挂件了
                Decorator applePhoneWithAccessories = new Accessories(phone);
                // 扩展手机挂件行为
                applePhoneWithAccessories.Print();
                Console.WriteLine("----------------------
    ");
    
                // 现在我同时有贴膜和手机挂件了
                Sticker sticker = new Sticker(phone);
                Accessories applePhoneWithAccessoriesAndSticker = new Accessories(sticker);
                applePhoneWithAccessoriesAndSticker.Print();
                Console.ReadLine();
            }
  • 相关阅读:
    PostgreSQL的数据类型
    博客园背景页面动态特效
    css ie7中overflow:hidden失效问题及解决方法
    win10的安装、win10启动盘制作
    windows win7 win10 多系统启动菜单 多系统引导设置
    微博加关注按钮
    {转}一位北京差生9年的北京生活
    最全的CSS浏览器兼容问题
    网站开发命名详细规范
    <meta http-equiv = "X-UA-Compatible" cotent = "IE=edge,chrome=1"/>
  • 原文地址:https://www.cnblogs.com/gaocong/p/6774145.html
Copyright © 2011-2022 走看看