Unity教程合集Unity基础入门分享程序员

设计模式---桥连模式(DesignPattern_Bridge

2017-08-30  本文已影响26人  su9257_海澜

DesignPattern_Bridge

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。

工程GitHub

源码注释及命名有所更改,个人感觉会比原版更好理解

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();
    }

}

上一篇下一篇

猜你喜欢

热点阅读