本文主要是介绍设计模式---观察者模式(DesignPattern_Observer),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘录自:设计模式与游戏完美开发
十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。
工程GitHub
using UnityEngine;
using System.Collections.Generic;namespace DesignPattern_Observer
{// 观察这抽象类public abstract class Observer{public abstract void Update();}// 主要中介public abstract class Subject{List<Observer> m_Observers = new List<Observer>();// 加入观察者public void Attach(Observer theObserver){m_Observers.Add( theObserver );}// 移除观察者 public void Detach(Observer theObserver){m_Observers.Remove( theObserver );}// 通知所有观察者public void Notify(){foreach( Observer theObserver in m_Observers)theObserver.Update();}}// 实例主要中介 public class ConcreteSubject : Subject{string m_SubjectState;public void SetState(string State){m_SubjectState = State;Notify();}public string GetState(){return m_SubjectState;}}// 实例的Observer1public class ConcreteObserver1 : Observer{string m_ObjectState;ConcreteSubject m_Subject = null;public ConcreteObserver1( ConcreteSubject theSubject){m_Subject = theSubject;}// 通知Subject更新public override void Update (){Debug.Log ("ConcreteObserver1.Update");// 取得Subject状态m_ObjectState = m_Subject.GetState();}public void ShowState(){Debug.Log ("ConcreteObserver1:Subject目前的主題:"+m_ObjectState);}}// 实例的Observer2public class ConcreteObserver2 : Observer{string m_ObjectState;ConcreteSubject m_Subject = null;public ConcreteObserver2( ConcreteSubject theSubject){m_Subject = theSubject;}// 通知Subject更新public override void Update (){Debug.Log("ConcreteObserver2.Update");// 取得Subject状态m_ObjectState = m_Subject.GetState();}public void ShowState(){Debug.Log("ConcreteObserver2:Subject目前的主題:" + m_ObjectState);}}}
using UnityEngine;
using System.Collections;
using DesignPattern_Observer;public class ObserverTest : MonoBehaviour
{void Start(){UnitTest();}void UnitTest(){// 主題ConcreteSubject theSubject = new ConcreteSubject();// 加入观察者ConcreteObserver1 theObserver1 = new ConcreteObserver1(theSubject);theSubject.Attach(theObserver1);theSubject.Attach(new ConcreteObserver2(theSubject));// 设定SubjecttheSubject.SetState("Subject狀態1");// 显示状态theObserver1.ShowState();}
}
这篇关于设计模式---观察者模式(DesignPattern_Observer)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!