一、目的:
刚开始看装饰模式的时候有点小晕,看了好几遍,又自己敲上了几遍才有了一些头绪,说白了装饰模式就是用来给某一个对象动态的添加功能或者职责的。
实现的过程中还会用到了里氏替换原则(前提是有多个被装饰者,则有一个抽象的Component类,因为在Decorator中会定义一个Component类型的对象,而在主程序中给他赋值时有可能是具体的某个ConcreteComponent的对象,ConcreteComponent对象是Component的子类,让子类代替父类出场并完成功能即为里氏替换原则)
二、原理:
Component:一个抽象类或接口,可以给这些对象动态的添加职责。
ConcreteComponent:定义了一个具体的对象(被装饰者),可以给这个对象添加功能和职责(比如要装饰墙,则墙就是这个对象)
Decorator:装饰的抽象类,继承了Component类
ConcreteDecorator:具体的装饰类(某一个具体的功能或指责),继承Decorator类,用来给装饰者ConcreteComponent对象添加装饰。
三、下面直接上代码:
拿人穿衣服的实例来分析代码的实现部分
1.这是一个ConcreteComponent类,被装饰者类
public class Person
{
public Person()
{ }
private string Name;
public Person(string name)
{
this.Name = name;
}
public virtual void Show()
{
Console.WriteLine("装扮者是{0}",Name);
}
}
2.装饰的抽象类Decorator,继承person类,用来给person的具体对象添加装饰用(当然不会直接用的这个类,而是用这个抽象类的子类)
public abstract class Decorator:Person
{
protected Person person = null;
public void SetPerson(Person per)
{
this.person = per;
}
public override void Show()
{
if (person!=null)
{
person.Show();
}
}
}
3.具体装饰的类ConcreteDecorator,继承Decorator类,用来给被装饰着person的对象添加装饰
public class DecoratorA:Decorator
{
public override void Show()
{
Console.WriteLine("高跟鞋");
base.Show();
}
}
public class DecoratorB:Decorator
{
public override void Show()
{
Console.WriteLine("长裙子");
base.Show();
}
}
4.主程序中的代码:
static void Main(string[] args)
{
Person personA = new Person("小红");
DecoratorA a = new DecoratorA();
DecoratorB b = new DecoratorB();
a.SetPerson(personA);
b.SetPerson(a);
b.Show();
Console.ReadKey();
}
对于装饰者模式可以灵活来用,如上面的代码例子中被装饰者只有一个,则可以省略Component类,直接声明一个ConcreteComponent类(上例中是Person类)即可,而Decorator类直接继承ConcreteComponent类。
同样如果要装饰的功能只有一项,则也不用创建Decorator类,直接创建一个ConcreteDecorator类即可。
分享到:
相关推荐
装饰模式简单例子,根据《Head First设计模式》第3章中的咖啡店的例子编写
java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式
装饰模式是Erich Gamma等人所著的《设计模式:可利用面向对象软件的基础》一书中众多模式之一。一般来说,此模式在设计Swing的程序员中比较流行,他们用它来改进软件。今天,即使有许多程序是基于Web应用的,装饰...
设计模式 c# 装饰模式
装饰模式.doc 装饰模式.doc 装饰模式.doc
最简单的装饰模式实现,在学习的过程种不需要理解复杂的需求,只需理解该模式的特性。
JAVA设计模式之装饰模式代码
装饰模式的一个简单实例,小猪吃苹果的游戏,每吃一种苹果,增加一种不同的功能。装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。
54-Spring设计模式之装饰器模式1
设计模式--装饰者模式java例子
设计模式 - 装饰模式(C++实例) 若有问题,请指出。
C++23种设计模式之 装饰模式。:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的...
软件设计模式之装饰模式讲解ppt,可用于教学课件。
能实现基本图形的绘制功能,包括实现绘制直线、三角形和圆形,并有装饰;修改绘图笔颜色。 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小、删除、改变颜色、修变线形等)和持久化(利用文件或利用...
简单了说明,并用代码的方式解释了什么是装饰器模式,方便想要学习设计模式的童靴可以更好的学习和掌握设计模式,是自己的代码变得更高效和优雅
装饰模式的示例代码和文档,学习装饰模式的参考资料。
装饰模式实例,代码简单明了,只为介绍装饰模式。
c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
设计模式C++学习之装饰模式(Decorator)
23种设计模式--装饰模式