基于C#的设计模式学习之观察者模式

        观察者模式是一种对象行为型模式,指多个对象间存在一对多的依赖关系。当一个对象发生改变的时候,所有依赖于它的对象都得到通知并被自动更新。在实际的生活中,像石油价格出现波动的时候,中国的三桶油就会调整燃油价格,而机动车驾驶员们就要考虑自己的腰包了。

 

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
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值