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

    1.定义

    Attach additonal responsibilities to an object dynamically keeping the same interface,Decorators provide a flexible alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。)

    2.模式说明

    (1)Component抽象构件

    Component是一个接口或者是抽象类,就是定义我们最核心的对象

    (2)ConcreteComponent具体构件

    ConcreteComponent是最核心、最原始、最基本的接口或抽象类的实现,你要装饰的就是它。

    (3)Decorator装饰角色

    一般是抽象类,实现接口或抽象方法,在它的属性里必须有一个Private变量指向component抽象构件。

    (4)具体的装饰角色

    3.代码实现

        /// <summary>
        /// 抽象构件
        /// </summary>
        public abstract class Component
        {
            public abstract void Operate();
    
        }
    
        /// <summary>
        /// 具体的构件
        /// </summary>
        public class ConcreteComponent : Component
        {
            public override void Operate()
            {
    //如果你直接这样告诉你妈妈,估计不得打死也会骂死,所以我们要对它进行修饰。 Console.WriteLine(
    "妈妈妈妈,我只考到70分。"); } } public abstract class Decorator : Component { private Component _component; public Decorator(Component component) { _component = component; } public override void Operate() { _component.Operate(); } } public class ConcreteDecorator1 : Decorator { public ConcreteDecorator1(Component component) :base(component) { } private void DecoratorMethod1() { Console.WriteLine("妈妈妈妈,我班上最高的也才75分。"); } public override void Operate() { DecoratorMethod1(); base.Operate(); } } public class ConcreteDecorator2 : Decorator { public ConcreteDecorator2(Component component) : base(component) { } private void DecoratorMethod2() { Console.WriteLine("妈妈妈妈,我在班上排10多名呢。"); } public override void Operate() { DecoratorMethod2(); base.Operate(); } }
        /// <summary>
        /// 场景类
        /// </summary>
        class Program
        {
    
            private static void Main(string[] args)
            {
                Component component  = new ConcreteComponent();
    
                component = new ConcreteDecorator1(component);
    
                component = new ConcreteDecorator2(component);
    
                component.Operate();
    
                Console.ReadKey();
            }
    
        }

    4.装饰模式的优缺点

    (1)优点

    .装饰类和被装饰类可以独立发展,而不会相互耦合。换句话说,Component类无须知道Decorator类,Decorator类是从外部来扩展Component类的功能,而Decorator也不用知道具体的构件。

    .装饰模式是继承关系的一个替代关系。我们看装饰类Decorator,不管装饰多少层,返回的对象还是Component,实现的还是is-a的关系。继承是静态地给类增加功能,而装饰模式则是动态地增加功能。

    .装饰模式可以动态地扩展一个实现类的功能。

    (2)缺点

    多层装饰是比较复杂的。因此,尽量减少装饰类的数量,以便降低系统的复杂度。

  • 相关阅读:
    zsh(yum装包的时候,有时候会不行)
    an error occurred during the file system check错误的解决
    Linux使用tcpdump命令抓包保存pcap文件wireshark分析
    安装win7或win8系统时UEFI和Legacy模式的设置
    查看LINUX当前负载
    svn update 每更新一项就输出一行信息,使用首字符来报告执行的动作 这些字符的含义是:
    svn分支管理进行迭代开发
    Linux命令行下创建纳入版本控制下的新目录
    svn update -r m path 代码还原到某个版本(这样之前的log日志也就没了,也就是清空log日志)
    二进制日志BINARY LOG清理
  • 原文地址:https://www.cnblogs.com/JustYong/p/4588572.html
Copyright © 2011-2022 走看看