Unity实现设计模式——观察者模式
观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
简单来说就是某个人需要收到通知只需要订阅这个通知,当通知发送时会发送到每个订阅此通知的人。
下面用股票变化去通知订阅此股票的人
1.IInvestor(‘Observer’ interface)
投资人接口
interface IInvestor
{
void Update(Stock stock);
}
2.Investor(‘ConcreteObserver’ class)
投资人具体实现
class Investor : IInvestor
{
private string _name;
private Stock _stock;
// Constructor
public Investor(string name)
{
this._name = name;
}
public void Update(Stock stock)
{
//Debug.Log("Notified {0} of {1}'s " +"change to {2:C}", _name, stock.Symbol, stock.Price);
Debug.Log("Notified "+ _name+" of "+ stock+"'s " + "change to "+stock.Price)服务器托管网;
}
// Gets or sets the stock
public Stock Stock
{
get { return _stock; }
set { _stock = value; }
}
}
3.Stock(The ‘Subject’ abstract class)
股票基类
abstract class Stock
{
private string _symbol;
private double _price;
private ListIInvestor> _investors = new ListIInvestor>();
// Constructor
public Stock(string symbol, double price)
{
this._symbol = symbol;
this._price = price;
}
public void Attach(IInvestor investor)
{
_investors.Add(investor);
}
public void Detach(IInvestor investor)
{
_investors.Remove(investor);
}
public void Notify()
{
foreach (IInvestor investor in _investors)
{
investor.Update(this);
}
Debug.Log("Stock Notify( ) called");
}
// Gets or sets the price
public double Price
{
get { return _price; }
set
{
if (_price != value)
{
_price = value;
Notify();
}
}
}
// Gets the symbol
public string Symbol
{
get { return _symbol; }
}
}
4.IBM(‘ConcreteSubject’ class)
‘IBM’这只股票
class IBM : Stock
{
// Constructor
public IBM(string symbol, double price)
: base(symbol, price)
{
}
}
5.测试
public class ObserverExample1 : MonoBehaviour
{
void Start()
{
// Create IBM stock and attach investors
IBM ibm = new IBM("IBM", 120.00);
ibm.Attach(new Investor("Sorros"));
ibm.Attach(new Investor("Berkshire"));
// Fluctuating prices will notify investors
ibm.Price = 120.10;
ibm.Price = 121.00;
ibm.Price = 120.50;
ibm.Price = 120.75;
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: #yyds干货盘点# LeetCode程序员面试金典:用最少数量的箭引爆气球
1.简述: 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组points,其中points[i] = [xstart, xend]表示水平直径在xstart和xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x …