设计模式 - 装饰模式

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

什么是装饰模式?

装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。

适用范围

动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。不改变接口的前提下,增强所考虑的类的性能。

何时使用:

1)需要扩展一个类的功能,或给一个类增加附加责任。
2)需要动态的给一个对象增加功能,这些功能可以再动态地撤销。
3)需要增加一些基本功能的排列组合而产生的非常大量的功能,从而使继承变得    不现实。

角色构成

抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。

具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类

装饰角色(Decorator):持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口

具体装饰角色(ConcreteDecorator):负责给构件对象“贴上”附加的责任

结构图

代码

public class Person
        {
            public Person()
            { }
            private string name;
            public Person(string name)
            { 
                this .name = name;  
            }
            public virtual void Show()
            {
                Console.WriteLine("装扮的{0}",name);
            }
        }
//抽象装扮
class Finery : Person
{
    protected Person component;
    //打扮
    public void Decorate(Person componnent)
    {
        this.component = componnent;
    }
    public override void Show()
    {
        if (component != null)
        {
            component.Show();
        }
    }
//具体服饰类
    class Tshirt : Finery
    {
        public override void Show()
        {
            Console.WriteLine("T恤");
            base.Show();
        }
    }
    class BigTrouse : Finery
    {
        public override void Show()
        {
            Console.WriteLine("垮裤");
            base.Show();
        }
    }

客户端

public static void Main(String[] args)
    { 
        Person  zy = new Person("小菜");
        Console.WriteLine("第一种装扮");
        Tshirt T = new Tshirt();
        BigTrouse B = new BigTrouse();
        T.Decorate(zy);
        B.Decorate(T);
        B.Show();
        Console.WriteLine();


相关文章
|
4月前
|
设计模式 PHP
php设计模式--装饰模式(七)装饰模式完成文章编辑
php设计模式--装饰模式(七)装饰模式完成文章编辑
33 0
|
4月前
|
设计模式 中间件 PHP
设计模式 | 装饰模式
设计模式 | 装饰模式
27 0
|
10月前
|
设计模式
设计模式系列教程(12) - 装饰模式
设计模式系列教程(12) - 装饰模式
28 0
|
11月前
|
设计模式 算法 uml
结构型设计模式01-装饰模式
结构型设计模式01-装饰模式
24 0
|
11月前
|
设计模式
设计模式13 - 装饰模式【Decorator Pattern】
设计模式13 - 装饰模式【Decorator Pattern】
25 0
|
1月前
|
设计模式 Java
【八】设计模式~~~结构型模式~~~装饰模式(Java)
文章详细介绍了装饰模式(Decorator Pattern),这是一种对象结构型模式,用于在不使用继承的情况下动态地给对象添加额外的职责。装饰模式通过关联机制,使用装饰器类来包装原有对象,并在运行时通过组合的方式扩展对象的行为。文章通过图形界面构件库的设计案例,展示了装饰模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和应用示例。装饰模式提高了系统的灵活性和可扩展性,适用于需要动态、透明地扩展对象功能的情况。
【八】设计模式~~~结构型模式~~~装饰模式(Java)
|
3月前
|
设计模式
结构型设计模式之装饰模式
结构型设计模式之装饰模式
|
4月前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
|
4月前
|
设计模式 Go
[设计模式 Go实现] 结构型~装饰模式
[设计模式 Go实现] 结构型~装饰模式
|
4月前
|
设计模式 Java
小谈设计模式(7)—装饰模式
小谈设计模式(7)—装饰模式