• 设计模式


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

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace ConsoleApplication1
     7 {
     8     class Person
     9     {
    10         private string name;
    11 
    12         public Person()
    13         { }
    14 
    15         public Person(string name)
    16         {
    17             this.name = name;
    18         }
    19 
    20         public virtual void Show()
    21         {
    22             Console.Write(" Decorated " + this.name);
    23         }
    24     }
    25 
    26     class Finery: Person
    27     {
    28         private Person person;
    29 
    30         public void SetDecoration(Person person)
    31         {
    32             this.person = person;
    33         }
    34 
    35         public override void Show()
    36         {
    37             if(this.person != null)
    38             {
    39                 this.person.Show();
    40             }
    41         }
    42     }
    43 
    44     class Sneaker: Finery
    45     {
    46         public override void Show()
    47         {
    48             Console.Write(" Sneaker ");
    49 
    50             base.Show();
    51         }
    52     }
    53 
    54     class Jeans : Finery
    55     {
    56         public override void Show()
    57         {
    58             Console.Write(" Jeans ");
    59 
    60             base.Show();
    61         }
    62     }
    63 
    64     class WhiteTshirt : Finery
    65     {
    66         public override void Show()
    67         {
    68             Console.Write(" White Tshirt ");
    69 
    70             base.Show();
    71         }
    72     }
    73 
    74     class Program
    75     {
    76         static void Main(string[] args)
    77         {
    78             Person jim = new Person("Jim");
    79             Sneaker sneaker = new Sneaker();
    80             Jeans jeans = new Jeans();
    81             WhiteTshirt whiteTshirt = new WhiteTshirt();
    82 
    83             sneaker.SetDecoration(jim);
    84             jeans.SetDecoration(sneaker);
    85             whiteTshirt.SetDecoration(jeans);
    86 
    87             whiteTshirt.Show();
    88 
    89             Console.ReadLine();
    90         }
    91     }
    92 }

    装饰模式是为自己已有功能动态添加更多功能的一种方式。

    优点:把类中装饰功能从类中搬移出去,这样可以简化原有的类。这样可以有效的把核心功能和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

  • 相关阅读:
    [svc]frp内网穿透
    [svc]caffe安装笔记
    [na]icmp重定向
    [tools]python的mkdocs模块分分钟将md搞成一个网站
    [svc]samba服务搭建
    [ci] jenkins的Timestamper插件-让日志显示时间
    [k8s]subpath解决cm覆盖目录问题
    struts2+jquery+ajax实现上传&&校验实例
    java String.split方法是用注意点(转)
    loadrunner java协议脚本要点
  • 原文地址:https://www.cnblogs.com/zzunstu/p/9298319.html
Copyright © 2020-2023  润新知