CSharp: Observer Pattern in donet core 6

 

using Geovin.Du.DuObserver.DuNewspaper.Publishers.Common;
using Geovin.Du.DuObserver.DuNewspaper.Subscribers.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Geovin.Du.DuObserver.DuNewspaper.Subscribers
{

    /// <summary>
    /// 觀察者模式 Observer Pattern 亦稱: 事件訂閱者、監聽者、Event-Subscriber、Listener、Observer
    /// </summary>
    public class User : IUser
    {

        /// <summary>
        /// 
        /// </summary>
        private readonly decimal _availableMonthlySubscriptionAmount;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="name"></param>
        /// <param name="username"></param>
        /// <param name="availableMonthlySubscriptionAmount"></param>
        public User(string name, string username, decimal availableMonthlySubscriptionAmount)
        {
            Name = name;
            Username = username;
            _availableMonthlySubscriptionAmount = availableMonthlySubscriptionAmount;
        }
        /// <summary>
        /// 
        /// </summary>
        public string Username { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="newspaper"></param>
        public void ReportSubscriptionPriceChange(Newspaper newspaper)
        {
            if (newspaper.MonthlyPrice > _availableMonthlySubscriptionAmount)
            {
                newspaper.Unsubscribe(this);
            }
        }
    }
}


   /// <summary>
    /// 觀察者模式 Observer Pattern 亦稱: 事件訂閱者、監聽者、Event-Subscriber、Listener、Observer
    /// </summary>
    public interface IUser
    {

        /// <summary>
        /// 
        /// </summary>
        public string Username { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="newspaper"></param>

        void ReportSubscriptionPriceChange(Newspaper newspaper);
    }


    /// <summary>
    /// 觀察者模式 Observer Pattern 亦稱: 事件訂閱者、監聽者、Event-Subscriber、Listener、Observer
    /// </summary>
    public class DailyMail : Newspaper
    {

        /// <summary>
        /// 
        /// </summary>
        public DailyMail()
            : base("每日郵報", 5)
        {
        }
    }

   /// <summary>
    /// 觀察者模式 Observer Pattern 亦稱: 事件訂閱者、監聽者、Event-Subscriber、Listener、Observer
    /// </summary>
    public static class NewspaperExecutor
    {

        /// <summary>
        /// 
        /// </summary>
        public static void Execute()
        {
            ConsoleExtension.WriteSeparator("觀察者模式 Observer Pattern ;Newspaper demo");

            var dailyMail = new DailyMail();
            dailyMail.Subscribe(new User("塗聚文", "geovindu", 5));
            dailyMail.Subscribe(new User("Geovin Du", "du", 10));
            dailyMail.Subscribe(new User("塗氏", "geovin", 6));

            Console.WriteLine();
            dailyMail.MonthlyPrice = 6;

            Console.WriteLine();
            dailyMail.MonthlyPrice = 8;
        }
    }

  

調用:

Geovin.Du.DuObserver.DuNewspaper.NewspaperExecutor.Execute();

  

輸出:

觀察者模式 Observer Pattern ;Newspaper demo
--------------------------------------------------
塗聚文 是否訂閱 每日郵報 報紙.
Geovin Du 是否訂閱 每日郵報 報紙.
塗氏 是否訂閱 每日郵報 報紙.

每日郵報 報紙每月價格更改爲 ¥6.00.
塗聚文 未訂閱 每日郵報 報紙.

每日郵報 報紙每月價格更改爲 ¥8.00.
塗氏 未訂閱 每日郵報 報紙.

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章