CSharp: Observer Pattern in donet core 6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | 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; } } |
调用:
1 | Geovin.Du.DuObserver.DuNewspaper.NewspaperExecutor.Execute(); |
输出:
1 2 3 4 5 6 7 8 9 10 11 | 观察者模式 Observer Pattern ;Newspaper demo -------------------------------------------------- 涂聚文 是否订阅 每日邮报 报纸. Geovin Du 是否订阅 每日邮报 报纸. 涂氏 是否订阅 每日邮报 报纸. 每日邮报 报纸每月价格更改为 ¥6.00. 涂聚文 未订阅 每日邮报 报纸. 每日邮报 报纸每月价格更改为 ¥8.00. 涂氏 未订阅 每日邮报 报纸. |
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
CSharp code
标签:
desgin patterns
, 设计模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2013-12-21 asp: AJAX Database