设计模式之装饰模式

简介: 设计模式之装饰模式

装饰模式的定义:


是允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式在设计模式中属于结构型模式,它是作为现有类的一个包装。


主要意图:动态的给一个对象添加一些额外的职责 (就增加功能来说,装饰器模式相比生成自雷更为灵活)。


使用场景:在不想增加很多子类的情况下扩展类(1,扩展一个类的功能。2,动态增加功能,动态撤销。)。


优点:装饰类和被装饰类可以独立发展,耦合度低,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。


缺点:多层装饰比较麻烦


在某种意义上是可以代替继承使用。


首先我们来看一下它的类图:



接下来是代码:

using System;
namespace _03装饰模式_演示
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();
            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();
            Console.Read();
        }
    }
    abstract class Componet
    {
        public abstract void Operation();
    }
    class ConcreteComponent:Componet
    {
        public override void Operation()
        {
            Console.WriteLine("具体对象的操作");
        }
    }
    abstract class Decorator:Componet
    {
        protected Componet componet;
        public void SetComponent(Componet componet)
        {
            this.componet = componet;
        }
        public override void Operation()
        {
            if(componet != null)
            {
                componet.Operation();
            }
        }
    }
    class ConcreteDecoratorA:Decorator
    {
        private string addedState;
        public override void Operation()
        {
            base.Operation();
            addedState = "New State";
            Console.WriteLine("具体装饰对象A的操作");
        }
    }
    class ConcreteDecoratorB:Decorator
    {
        public override void Operation()
        {
            base.Operation();
            AddedBehavior();
            Console.WriteLine("具体张氏对象B的操作");
        }
        private void AddedBehavior()
        {
        }
    }
}
相关文章
|
6月前
|
设计模式 PHP
php设计模式--装饰模式(七)装饰模式完成文章编辑
php设计模式--装饰模式(七)装饰模式完成文章编辑
38 0
|
6月前
|
设计模式 中间件 PHP
设计模式 | 装饰模式
设计模式 | 装饰模式
34 0
|
设计模式
设计模式系列教程(12) - 装饰模式
设计模式系列教程(12) - 装饰模式
35 0
|
设计模式 算法 uml
结构型设计模式01-装饰模式
结构型设计模式01-装饰模式
31 0
|
设计模式
设计模式13 - 装饰模式【Decorator Pattern】
设计模式13 - 装饰模式【Decorator Pattern】
28 0
|
3月前
|
设计模式 Java
【八】设计模式~~~结构型模式~~~装饰模式(Java)
文章详细介绍了装饰模式(Decorator Pattern),这是一种对象结构型模式,用于在不使用继承的情况下动态地给对象添加额外的职责。装饰模式通过关联机制,使用装饰器类来包装原有对象,并在运行时通过组合的方式扩展对象的行为。文章通过图形界面构件库的设计案例,展示了装饰模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和应用示例。装饰模式提高了系统的灵活性和可扩展性,适用于需要动态、透明地扩展对象功能的情况。
【八】设计模式~~~结构型模式~~~装饰模式(Java)
|
5月前
|
设计模式
结构型设计模式之装饰模式
结构型设计模式之装饰模式
|
6月前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
|
6月前
|
设计模式 Go
[设计模式 Go实现] 结构型~装饰模式
[设计模式 Go实现] 结构型~装饰模式
|
设计模式
设计模式——装饰模式
设计模式——装饰模式
59 0