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();
            }
  • 相关阅读:
    文件上传&ContentType请求格式
    Ajax的简单操作
    外键的变种,单表和多表的查询
    Sql 库和表的基本操作、基本数据类型
    协程、IO多路复用、
    线程/进程锁、池,进程的数据共享
    进程和线程相关
    用wampserver安装thinksns时点击index.php显示空白
    类中的初始化函数作用
    python中的from XX import YY与import YY
  • 原文地址:https://www.cnblogs.com/gaocong/p/6774145.html
Copyright © 2011-2022 走看看