观察者模式
来源:互联网 发布:淘宝下单微信全额返现 编辑:程序博客网 时间:2024/05/22 11:52
观察者模式的应用
网上商店中如果商品(product)在名称(name)、价格(price)等方面有变化,系统能自动通知会员,将是网上商店区别传统商店的一大特色。如何设计实现? 说明你所选择的设计模式,画出类关系图并指明各个类的角色。应用外观模式,用C#控制台应用程序改进该设计。绘制该模式的UML图。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace shiyan9guanchazhemoshi{ abstract class Observer { protected Subject sub; public Observer( Subject sub) { this.sub = sub; } public abstract void Update(); } class PriceObserver : Observer { public PriceObserver(Subject sub) : base( sub){ } public override void Update() { Console.WriteLine("{0}:价格变化",sub.SubjectState); } } class NameObserver : Observer { public NameObserver(Subject sub) : base(sub) { } public override void Update() { Console.WriteLine("{0}:名称变化", sub.SubjectState); } } interface Subject { void Attach(Observer observer); void Detach(Observer observer); void Notify(); string SubjectState { get; set; } } class Secretary : Subject { private IList<Observer> observers = new List<Observer>(); private string action; public void Attach(Observer observer) { observers.Add(observer); } public void Detach(Observer observer) { observers.Remove(observer); } public void Notify() { foreach (Observer o in observers) o.Update(); } public string SubjectState { get { return action; } set { action = value; } } } class Program { static void Main(string[] args) { Secretary sc = new Secretary(); PriceObserver po = new PriceObserver(sc); NameObserver no = new NameObserver(sc); sc.Attach(po); sc.Attach(no); sc.SubjectState = "有变化---5/19"; sc.Notify(); sc.Detach(no); sc.SubjectState = "有变化---5/20"; sc.Notify(); Console.Read(); } }}
阅读全文
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- hdu2888—Check Corners(二维RMQ)
- Mysql 隔离级别和锁(一)
- LinkedHashMap及其源码分析
- Spring Data操作Redis时,发现key值出现 \xac\xed\x00\x05t\x00\tb
- Linux上不了网
- 观察者模式
- CTF--信息技术对抗赛ISCC之安卓逆向分析
- Android 自定义的Dialog,点击确定按钮,让其根据条件判断消失与否
- Android 7.0调用相机方法
- 链表学习(5)
- Matisse——Android 图片/视频选择器
- POJ 2186 Popular Cows 强连通分量(Kosaraju)
- 程序猿学习第三天,框架和表单
- Android 拖拽ViewDragHelper解析 自定义ViewGroup神器