设计模式阅读备忘笔记-装饰模式
策略模式(Strategy)
动态的给一个对象添加一些额外的职责,就是增加功能来说,装饰模式比生成子类更加灵活。
理解:将所需的功能按正确的顺序串联起来进行控制,每个装饰对象的实现就和如何使用这个对象分开了,每个装饰对象只关心自己的功能,不需要关心如何添加在对象链中。
代码例子:
1、抽象对象接口
//定义一个对象的接口,可以对对象动态添加职责
abstract class ACompoent
{
public abstract void Operation();
}
2、最初没有被任何装饰的对象
//被装饰的原始对象,类似于系统中已有的类
class ContreteCompoent: ACompoent
{
public override void Operation()
{
//TODO原功能
}
}
3、装饰类接口
class Decorator : ACompoent
{
//被装饰的对象,可理解为装饰链表的前一个节点
protected ACompoent aCompoent;
//设置被装饰对象接口
public void SetAComponet(ACompoent aCompoent)
{
this.aCompoent = aCompoent;
}
//执行操作
public override void Operation()
{
aCompoent.Operation();
}
}
4、具体装饰类
//具体装饰功能类
class ContreteDecotorA : Decorator
{
//比如新增字段
private string aMsg;
//
public override void Operation()
{
//先执行原被装饰对象的功能,在加入独有功能
base.Operation();
AddFunction();
}
//新增的函数
public void AddFunction()
{
}
}
5、使用例子
//具体使用
void DoSomeThings()
{
//原始对象
ContreteCompoent oric = new ContreteCompoent();
//装饰对象
ContreteDecotorA deca = new ContreteDecotorA();
//设置deca中被装饰的对象为原始对象oric
deca.SetAComponet(oric);
//执行操作,这里执行原来对象的Operation(),和装饰deca对象中的新增独有的Operation()
deca.Operation();
}