前言:
装饰模式,属于二十三个设计模式中之一,那么,什么是装饰模式,下面,大家请跟着我一起走进装饰模式,来看看装饰模式:
核心:
(一)、结构图
想知道设计模式吗?那么看了它的UML图,你就一目了然了!
(二)基本代码
Component类
abstract class Component
{
public abstract void Operation();
}
ConcreteComponent类
class ConcreteComponent:Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作");
}
}
Decorato类
abstract class Decorator : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
ConcreteDecoratorA类
class ConcreteDecoratorA : Decorator
{
private string addedState;
public override void Operation()
{
base .Operation();
addedState="New State";
Console.WriteLine("具体操作对象A的操作");
}
}
ConcreteDecoratorB类
class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base .Operation();
AddedBehavior();
Console .WriteLine ("具体操作对象B的操作");
}
public void AddedBehavior()
{
}
}
客户端代码
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();
}
(三)注意
学习设计模式要善于变通,如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类,同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decoratorl类,而可以把Decorato和ConcreteDecorator的责任合并成一个类。
eg.人靠衣服来打扮
(四)、定义
动态的给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
我们可以通过记住穿衣服打扮自己的例子来理解这个装饰模式,装饰自己,就像添加一些额外的功能一样,这样有利于我们的记忆!
(五)、归类
隶属于创建型模式
(六)、优点
简化原有的类,将核心职责和装饰功能分开
总结:
装饰模式,更好的在代码中实现,加以体会。要 当心的是,装饰模式虽然不错,但是我们在用它的时候,要注意装饰的顺序。
标签:component,void,Component,模式,public,Operation,设计模式,装饰 From: https://blog.51cto.com/u_15586641/5763784