zoukankan      html  css  js  c++  java
  • 设计模式之装饰模式

    一:装饰模式的概念

    1、装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生产子类更为灵活

    2、装饰模式是为已有的功能动态添加更多功能的一种方式,把每个要装饰的功能放在单独的类中,并让这个类包装所要装饰的对象,因此,当需要执行特殊行为的时候,客户代码就可以再运行时进行装饰

    2、装饰模式结构图

    二、实例

    1、代码结构视图

    2、相关代码

    “Person”类(ConcreteComponent)

     public class Person
        {
            public Person()
            {
            }
    
            private string name;
    
            public Person(string name)
            {
                this.name = name;
            }
    
            public virtual void Show()
            {
                Console.WriteLine("装扮的{0}",name);
            }
        }
    

     "服饰类"(Decorator)

      public  class Finery:Person
        {
            protected Person component;
    
            //打扮
            public void Decorate(Person component)
            {
                this.component = component;
            }
    
            public override void Show()
            {
                if (component != null)
                {
                    component.Show();
                }
            }
    
        }
    

     具体服饰类(ConcreteDecorator)

     public class TShirts : Finery//大T恤
        {
            public override void Show()
            {
                Console.Write("大T恤");
                base.Show();
            }
        }
      public   class WearLeatherShoes:Finery//皮鞋
        {
            public override void Show()
            {
                Console.Write("皮鞋");
                base.Show();
            }
        }
    
    public  class WearTie:Finery//领带
        {
             public override void Show()
             {
                 Console.Write("领带");
                 base.Show();
             }
        }
    }
     
    
     public   class WearSuita:Finery//西装
        {
            public override void Show()
            {
                Console.Write("西装");
                base.Show();
            }
        }
      
    
    public class BigTrouser : Finery//垮裤
        {
            public override void Show()
            {
               Console.Write("垮裤");
                base.Show();
            }
        }
    

     客户代码

       class Program
        {
            static void Main(string[] args)
            {
                Person xc = new Person("小菜");
                Console.WriteLine("
    第一种装扮");
                WearSneakers pqx=new WearSneakers();
                BigTrouser kk=new BigTrouser();
                TShirts dtx=new TShirts();
    
                pqx.Decorate(xc);//装饰过程
                kk.Decorate(pqx);
                dtx.Decorate(kk);
                dtx.Show();
    
                Console.WriteLine("
    第二种装扮");
                WearLeatherShoes px=new WearLeatherShoes();
                WearTie ld=new WearTie();
                WearSuita xz=new WearSuita();
    
                px.Decorate(xc);//装饰过程
                ld.Decorate(px);
                xz.Decorate(ld);
                xz.Show();
    
                Console.Read();
            }
        }
    

     运行结果

  • 相关阅读:
    C++程序设计基础(7)位运算
    C++程序设计基础(1)程序的编译和执行
    深度学习看过的文档留存
    Linux常用快捷键
    从Zero到Hero,一文掌握Python关键代码
    三角测量原理与双目视觉景深恢复
    动态规划——DP算法(Dynamic Programing)
    算法-动态规划 Dynamic Programming--从菜鸟到老鸟
    语义分割--全卷积网络FCN详解
    2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译
  • 原文地址:https://www.cnblogs.com/gouguo/p/4343189.html
Copyright © 2011-2022 走看看