本文共 2723 字,大约阅读时间需要 9 分钟。
摘录自:设计模式与游戏完美开发
十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。
源码注释及命名有所更改,个人感觉会比原版更好理解
using UnityEngine;using System.Collections;namespace DesignPattern_Bridge{ // 抽象操作者基类 public abstract class Implementor { public abstract void OperationImp(); } //操作者1以及先关操作 public class ConcreteImplementor1 : Implementor { public ConcreteImplementor1(){} public override void OperationImp() { Debug.Log("執行Concrete1Implementor.OperationImp"); } } //操作者2以及先关操作 public class ConcreteImplementor2 : Implementor { public ConcreteImplementor2(){} public override void OperationImp() { Debug.Log("執行Concrete2Implementor.OperationImp"); } } // 扩展操作基类 public abstract class Abstraction { private Implementor m_Imp = null; public void SetImplementor( Implementor Imp ) { m_Imp = Imp; } public virtual void Operation() { if( m_Imp!=null) m_Imp.OperationImp(); } } // 扩展操作1 public class RefinedAbstraction1 : Abstraction { public RefinedAbstraction1(){} public override void Operation() { Debug.Log("物件RefinedAbstraction1"); base.Operation(); } } // 扩展操作2 public class RefinedAbstraction2 : Abstraction { public RefinedAbstraction2(){} public override void Operation() { Debug.Log("物件RefinedAbstraction2"); base.Operation(); } }}
using UnityEngine;using System.Collections;using DesignPattern_Bridge;public class BridgeTest : MonoBehaviour{ void Start() { UnitTest(); } // void UnitTest() { // 生成扩展操作1 Abstraction theAbstraction = new RefinedAbstraction1(); // 设定相关操作1 theAbstraction.SetImplementor(new ConcreteImplementor1()); theAbstraction.Operation(); // 设定相关操作2 theAbstraction.SetImplementor(new ConcreteImplementor2()); theAbstraction.Operation(); // 生成扩展操作2 theAbstraction = new RefinedAbstraction2(); // 设定相关操作1 theAbstraction.SetImplementor(new ConcreteImplementor1()); theAbstraction.Operation(); // 设定相关操作2 theAbstraction.SetImplementor(new ConcreteImplementor2()); theAbstraction.Operation(); }}
转载地址:http://udgjx.baihongyu.com/