裝飾模式(Decorator),動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé),就增加功能來(lái)說(shuō),裝飾模式比生成子類(lèi)更為靈活。[DP]

image.png
//Component類(lèi)
abstract class Component {
public abstract void Operation();
}
//ConcrenteComponent類(lèi)
class ConcrenteComponent : Component
{
public override void Operation()
{
//具體對(duì)象操作
}
}
//Decorator類(lèi)
abstract class Decorator : Component
{
Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
//客戶(hù)端代碼
class TestDecorator : MonoBehaviour {
void Start () {
ConcrenteComponent c = new ConcrenteComponent();
ConcreteDecoratorA cd1 = new ConcreteDecoratorA();
ConcreteDecoratorB cd2 = new ConcreteDecoratorB();
cd1.SetComponent(c);
cd2.SetComponent(cd1);
cd2.Operation();
}
}
總結(jié):裝飾模式簡(jiǎn)化原有的類(lèi)。把類(lèi)與裝飾功能區(qū)分開(kāi)了,這樣可以有效使用裝飾功能,自由度也變得很高。
何時(shí)使用:當(dāng)一個(gè)功能新加入的東西僅僅是為了滿足一些只在某種特定情況下才會(huì)執(zhí)行的特殊行為。裝飾模式把裝飾的功能放在單獨(dú)的類(lèi)中,并讓這個(gè)類(lèi)包裝它所要裝飾的對(duì)象,當(dāng)需要執(zhí)行特殊行為時(shí),按選擇順序使用裝飾功能包裝對(duì)象。