模式说法之——装饰

简介: 我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

 

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

 

 

 

(一)代码

public abstract class Component

    {

        public abstract void Do1();

        public abstract void Do2();

    }

 

    public class ConcreteComponent : Component

    {

        public override void Do1()

        {

            Console.WriteLine("第一件事。");

        }

 

        public override void Do2()

        {

            Console.WriteLine("第二件事。");

        }

    }

 

    public abstract class Decorator : Component

    {

        Component _component;

 

        public Decorator(Component component)

        {

            _component = component;

        }

 

 

        public override void Do1()

        {

            _component.Do1();

        }

 

        public override void Do2()

        {

            _component.Do2();

        }

    }

 

    public class ConcreteDecorator1 : Decorator

    {

        public ConcreteDecorator1(Component component):base(component)

        {

       

        }

 

        public override void Do1()

        {

            base.Do1();

            Console.WriteLine("听着音乐!");

        }

    }

 

    public class ConcreteDecorator2: Decorator

    {

        public ConcreteDecorator2(Component component)

            : base(component)

        {

 

        }

 

        public override void Do2()

        {

            base.Do1();

            Console.WriteLine("吃着零食!");

        }

    }

(二)测试

[Test]

        public void TestDecorator()

        {

            Component c1 = new ConcreteComponent();

 

            Decorator.Decorator d = new ConcreteDecorator1(c1);

 

            d.Do1();

 

        }

结果:

 

第一件事。听着音乐!

 

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
2月前
|
JavaScript
代码缺乏装饰?使用ts装饰器来装饰你的代码
该文章详细介绍了TypeScript中的装饰器特性,包括类装饰器、方法装饰器、属性装饰器和参数装饰器的定义与使用方法,并通过具体示例展示了装饰器在实际编码中的应用技巧。
|
6月前
|
前端开发
文本装饰
文本装饰。
14 1
|
Python
一日一技:装饰器如何装饰异步函数
一日一技:装饰器如何装饰异步函数
166 0
|
设计模式 Java
装饰与适配:解析Java设计模式中的装饰器模式和适配器模式
在软件开发领域,设计模式是一组经过实践验证的最佳实践方法,用于解决常见问题。装饰器模式和适配器模式分别是结构型设计模式中的两个重要成员,它们在不同的场景中发挥着关键作用。本文将深入了解装饰器模式和适配器模式的内涵,以及它们在Java中的实际应用。
125 0
|
Python
python装饰器中的4种类型(函数装饰函数、函数装饰类、类装饰函数、类装饰类)
python装饰器中的4种类型(函数装饰函数、函数装饰类、类装饰函数、类装饰类)
117 0
|
JavaScript 前端开发
js对象的创建对象模式和继承模式(下)---继承模式
js对象的创建对象模式和继承模式(下)---继承模式
98 0
|
JavaScript 前端开发
js对象的创建对象模式和继承模式(上)---构建对象模式
js对象的创建对象模式和继承模式(上)---构建对象模式
133 0
|
Java 数据库连接 数据库
|
设计模式 Java API
|
Java 数据库
包装模式就是这么简单啦
前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 前一篇已经讲解了代理模式了,今天要讲解的就是装饰模式啦~ 在看到FilterInputStream和FilterOutputStream时看到了之前常听见的装饰模式(对IO一定了解的同学可能都会知道那么一句话:在IO用得最多的就是装饰模式了)! 其实无论是代理模式还是装饰模式。
1266 0