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

    何为装饰者模式?

         装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态地给对象添加功能;

        

    View Code
    /*
     * 由SharpDevelop创建。
     * 用户: 秦仕川
     * 日期: 2013-2-2
     * 时间: 16:22
     * 
     * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
     
    */
    using System;

    namespace 装饰者模式
    {
        /// <summary>
        
    /// Description of Duck.
        
    /// </summary>
        public  class Animal
        {
            private string _AnimalName;
            
            public string AnimalName {
                get { return _AnimalName; }
                set { _AnimalName = value; }
            }
            public  void Walk(){
                Console.WriteLine(this.AnimalName+"Walk");
            }
            public virtual void DecaratorMethod(){
                
            }
        }
        public class WaterDuck:Animal{
            public WaterDuck(){
                this.AnimalName="水鸭子";
            }
        }
        public class WildDuck:Animal{
            public WildDuck(){
                this.AnimalName="野鸭子";
            }
        }
        public class Fish:Animal{
            public Fish(){
                this.AnimalName="";
            }
        }
         
        public class FlyDecarator:Animal{
            private Animal _animal;
            
            public FlyDecarator(Animal an){
                _animal=an;
            }
            public override void DecaratorMethod(){
                _animal.DecaratorMethod();
                Console.WriteLine("fly");
            }
        }
        public class SwimDecarator:Animal{
            private Animal _animal;
            
            public SwimDecarator(Animal an){
                _animal=an;
            }
            public override void DecaratorMethod(){
                _animal.DecaratorMethod();
                Console.WriteLine("Swim");
            }
        }
    }

        装饰类,去装饰对象,一层装饰一层,达到功能添加的效果.


    using System;

    namespace 装饰者模式
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Fish fish=new Fish();
                SwimDecarator sw=new SwimDecarator(fish);
                sw.DecaratorMethod();
                
                WildDuck wd=new WildDuck();
                SwimDecarator swd=new SwimDecarator(wd);
                FlyDecarator fly=new FlyDecarator(swd);
                fly.DecaratorMethod();
                
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
            }
        }
    }
     

  • 相关阅读:
    测试同学都应该知道的断言知识...
    自己如何修改Airtest的源码
    如何选择适合你的图像识别算法
    如何测试基于Unity3D引擎的游戏
    Web前端-按钮点击效果(水波纹)
    C# Email 帮助类 EmailHelper
    WinForm 加载大数据时不闪烁的ListView
    LZZ磁力资源搜索4.2.2,整合多个站点,大部分资源都能搜到
    C#7.0新特性和语法糖详解
    6种css3 transform图片悬停动态效果
  • 原文地址:https://www.cnblogs.com/humble/p/2890808.html
Copyright © 2011-2022 走看看