观察者模式是一种对象行为型模式,指多个对象间存在一对多的依赖关系。当一个对象发生改变的时候,所有依赖于它的对象都得到通知并被自动更新。在实际的生活中,像石油价格出现波动的时候,中国的三桶油就会调整燃油价格,而机动车驾驶员们就要考虑自己的腰包了。
namespace Designmode.Observer
{
/// <summary>
/// 人员的抽象类
/// </summary>
public interface IPerson
{
/// <summary>
/// 人的反应方法
/// </summary>
void Response();
}
}
namespace Designmode.Observer
{
/// <summary>
/// 消费者
/// </summary>
public class OilConsumer : IPerson
{
/// <summary>
/// 石油消费者
/// </summary>
public void Response()
{
Console.WriteLine("不开车上下班了,骑电动车");
}
}
}
namespace Designmode.Observer
{
/// <summary>
/// 石油供应商类
/// </summary>
public class OilSupplier : IPerson
{
/// <summary>
/// 供养商的反应
/// </summary>
public void Response()
{
Console.WriteLine("提高各种油品价格.");
}
}
}
namespace Designmode.Observer
{
/// <summary>
/// 价格抽象类
/// </summary>
public abstract class Price
{
/// <summary>
/// 价格的相关利益方
/// </summary>
public List<IPerson> Persons = new List<IPerson>();
/// <summary>
/// 添加利益相关方
/// </summary>
/// <param name="p">利益相关方</param>
public void Add(IPerson p)
{
if(!Persons.Contains(p))
Persons.Add(p);
}
/// <summary>
/// 移除利益相关方
/// </summary>
/// <param name="p">利益相关方</param>
public void Remove(IPerson p)
{
Persons.Remove(p);
}
/// <summary>
/// 价格上涨
/// </summary>
public abstract void Increase();
}
}
namespace Designmode.Observer
{
/// <summary>
/// 原油价格
/// </summary>
public class OilPrice : Price
{
/// <summary>
/// 价格上涨
/// </summary>
public override void Increase()
{
Console.WriteLine($"原油价格上涨啦!");
foreach (var p in Persons)
{
p.Response();
}
}
}
}
using Designmode.Observer;
namespace Designmode
{
class Program
{
static void Main(string[] args)
{
#region 观察者模式
OilPrice price = new OilPrice();
price.Add(new OilSupplier());
price.Add(new OilConsumer());
price.Increase();
#endregion
}
}
}