观察者模式Observer Pattern
来源:互联网 发布:dns默认端口 编辑:程序博客网 时间:2024/06/07 09:44
//枚举类
public enum State
{
Game,
NonGame
}
//抽象的目标
namespace DesignParttern.CS.ObserverPattern
{
abstract class Subject
{
protected List<Observer> observers;
public Subject()
{
observers = new List<Observer>();
}
public void _Attach(Observer obs)
{
observers.Add(obs);
}
public void _Detach(Observer obs)
{
observers.Remove(obs);
}
public void _Notify()
{
foreach (var obs in observers)
{
obs.update();
}
}
}
//具体的目标
class ConcreteSubject : Subject
{
public ConcreteSubject()
{
m_subjectState = State.NonGame;
}
private State m_subjectState;
public State m_SubjectState
{
get { return m_subjectState; }
set { m_subjectState = value; Console.WriteLine("触发修改状态为"+value); }
}
public State _GetState()
{
return m_subjectState;
}
}
}
//抽象的接口
interface Observer
{
void update();
}
//具体的观察者
class ConcreteObserver2 : Observer
{
private State m_observerState;
public ConcreteSubject m_subject;
//注册你要监听的对象
public ConcreteObserver2(ConcreteSubject subject)
{
m_subject = subject;
}
public void update()
{
m_observerState = m_subject._GetState();
if (m_observerState == State.NonGame)
{
Console.WriteLine("路比较平稳,新司机开车");
}
else
{
Console.WriteLine("太刺激了,新司机下车");
}
}
}
如何讲观察者和目标绑定在一起
有两种注册的方式,一种是直接在具体类构造方法中指定:我目前使用这一种 ,如
public ConcreteObserver(ConcreteSubject subject)
{
m_subject = subject;
}
这样我们可以这样调用
ConcreteSubject gameState = new ConcreteSubject();
ConcreteObserver letter3 = new ConcreteObserver(gameState);
第二种:就是在父类中声明,这样就可以在父类中直接指定了,这里只是一种思路,目前还认为这一种不太好,等将来有缘再完善吧
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern
- Observer Pattern(观察者模式)
- Observer Pattern(观察者模式)
- 观察者模式(Observer Pattern)
- 观察者模式 ObServer Pattern
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer pattern)
- 观察者模式【Observer Pattern】
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- Observer Pattern 观察者模式
- 观察者模式(Observer pattern)
- 注意在ajax中return false 为什么表单还是会提交呢
- 简单快捷解决caffe源代码在其他工程(MFC、QT、win32)中调用的问题
- 一次磁盘IO对比
- 简单文件备份工具(C#)
- Next Greater Element II
- 观察者模式Observer Pattern
- Bash Shell 的 嵌套的While带来的问题
- Namespaces (C++)
- linux命令便捷手册
- MVP&Retrofit&Rxjava&Gson的简单例子
- Codeforces 844C Sorting by Subsequences【思维】
- C语言之continue与break的异同
- VS项目属性的一些配置项的总结
- TensorFlow函数:tf.Session()和tf.Session().as_default()的区别