设计模式题目-观察者模式(Observer)
1.题目某在线股票软件需要提供如下功能:当股票购买者购买的某只股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的股民。现使用观察者模式设计该系统,绘制类图并编成实现。2.题解2.1UML类图首先是UML类图,如下图所示:2.2实现代码(C#)代码如下:abstract class Observer{public abs...
·
1.题目
某在线股票软件需要提供如下功能:当股票购买者购买的某只股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的股民。现使用观察者模式设计该系统,绘制类图并编成实现。
2.题解
2.1UML类图
首先是UML类图,如下图所示:
2.2实现代码(C#)
代码如下:
abstract class Observer
{
public abstract void Update();
}
abstract class Subject
{
protected IList<Observer> holders = new List<Observer>();
//增加观察者
public void Attach(ConcreteObsever holder)
{
holders.Add(holder);
}
//移除观察者
public void Remove(ConcreteObsever holder)
{
holders.Remove(holder);
}
//通知
public abstract void Notify();
}
class ConcreteSubject : Subject
{
private int Percent;
//具体涨幅
public int rangePercent
{
get { return Percent; }
set { Percent = value; }
}
public override void Notify()
{
if (rangePercent >= 5)
{
foreach (ConcreteObsever h in holders)
h.Update();
}
else
{
Console.WriteLine("当前涨幅为{0}%", Percent);
Console.WriteLine("股票变化正常...");
Console.WriteLine("****************");
}
}
}
class ConcreteObsever : Observer
{
private string name;
private ConcreteSubject system;
public ConcreteObsever(string name, ConcreteSubject sys)
{
this.name = name;
this.system = sys;
}
public override void Update()
{
Console.WriteLine("正在发送通知股民成员:" + name + "。内容为:股票价格变化幅度达到5%..");
Console.WriteLine("***" + name + "已收到通知");
}
public ConcreteSubject System
{
get { return system; }
set { system = value; }
}
}
class Program
{
static void Main(string[] args)
{
ConcreteSubject sys = new ConcreteSubject();
ConcreteObsever wmr = new ConcreteObsever("XXX", sys);
ConcreteObsever my = new ConcreteObsever("马云", sys);
sys.Attach(wmr);
sys.Attach(my);
sys.rangePercent = 1;
sys.Notify();
sys.rangePercent = 3;
sys.Notify();
sys.rangePercent = 5;
sys.Notify();
Console.Read();
}
}
2.3运行结果
运行结果如下:
3.资源链接
链接:https://pan.baidu.com/s/1Wum8o8qzvlxg2WOY6ayYZw
提取码:kppr
更多推荐



所有评论(0)