摘錄自:設(shè)計模式與游戲完美開發(fā)
十年磨一劍糠聪,作者將設(shè)計模式理論巧妙地融入到實(shí)踐中队寇,以一個游戲的完整實(shí)現(xiàn)呈現(xiàn)設(shè)計模式的應(yīng)用及經(jīng)驗(yàn)的傳承 《軒轅劍》之父——蔡明宏、資深游戲制作人——李佳澤、Product Evangelist at Unity Technologies——Kelvin Lo益眉、信仁軟件設(shè)計創(chuàng)辦人—— 賴信仁、資深3D游戲美術(shù)——劉明愷 聯(lián)合推薦全書采用了整合式的項(xiàng)目教學(xué)姥份,即以一個游戲的范例來應(yīng)用23種設(shè)計模式的實(shí)現(xiàn)貫穿全書郭脂,讓讀者學(xué)習(xí)到整個游戲開發(fā)的全過程和作者想要傳承的經(jīng)驗(yàn),并以淺顯易懂的比喻來解析難以理解的設(shè)計模式殿衰,讓想深入了解此領(lǐng)域的讀者更加容易上手朱庆。
工程GitHub
DECORATOR—Mary過完輪到Sarly過生日,還是不要叫她自己挑了闷祥,不然這個月伙食費(fèi)肯定玩完娱颊,拿出我去年在華山頂上照的照片,在背面寫上“最好的的禮物凯砍,就是愛你的Fita”箱硕,再到街上禮品店買了個像框,再找隔壁搞美術(shù)設(shè)計的Mike設(shè)計了一個漂亮的盒子裝起來……悟衩,我們都是Decorator剧罩,最終都在修飾我這個人呀,怎么樣座泳,看懂了嗎惠昔?
裝飾模式:裝飾模式以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個替代方案挑势,提供比繼承更多的靈活性镇防。動態(tài)給一個對象增加功能,這些功能可以再動態(tài)的撤消潮饱。增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能来氧。
using UnityEngine;
using System.Collections;
namespace DesignPattern_Decorator
{
// 動態(tài)增加組建的基類
public abstract class Component
{
public abstract void Operator();
}
//實(shí)例組件
public class ConcreteComponent : Component
{
public override void Operator()
{
Debug.Log("ConcreteComponent.Operator");
}
}
// 持有指向Component的reference,須符合Component的介面
public class Decorator : Component
{
Component m_Component;
public Decorator(Component theComponent)
{
m_Component = theComponent;
}
public override void Operator()
{
m_Component.Operator();
}
}
// 增加額外的功能A
public class ConcreteDecoratorA : Decorator
{
Component m_Component;
public ConcreteDecoratorA(Component theComponent) : base(theComponent)
{
}
public override void Operator()
{
base.Operator();
AddBehaivor();
}
private void AddBehaivor()
{
Debug.Log("ConcreteDecoratorA.AddBehaivor");
}
}
// 增加額外的功能B
public class ConcreteDecoratorB : Decorator
{
Component m_Component;
public ConcreteDecoratorB(Component theComponent) : base(theComponent)
{
}
public override void Operator()
{
base.Operator();
AddBehaivor();
}
private void AddBehaivor()
{
Debug.Log("ConcreteDecoratorB.AddBehaivor");
}
}
}
using UnityEngine;
using System.Collections;
using DesignPattern_Decorator;
using DesignPattern_ShapeDecorator;
public class DecoratorTest : MonoBehaviour
{
void Start()
{
//UnitTest_Shape();
UnitTest();
}
//
void UnitTest()
{
// 物件
ConcreteComponent theComponent = new ConcreteComponent();
// 增加Decorator
ConcreteDecoratorA theDecoratorA = new ConcreteDecoratorA(theComponent);
theDecoratorA.Operator();
ConcreteDecoratorB theDecoratorB = new ConcreteDecoratorB(theComponent);
theDecoratorB.Operator();
// 再增加一層
ConcreteDecoratorB theDecoratorB2 = new ConcreteDecoratorB(theDecoratorA);
theDecoratorB2.Operator();
}
}