这个题目算是比较经典的观察者模式了,老鼠作为一个Subject,主动发出跑的动作,紧跟着猫由于老鼠的跑而发出叫声,主人也被惊醒,在这里猫跟主人都是被动的,是观察者角色,代码实现如下:

 class CSubject;
//观察者
class CObserver
{
public:
CObserver(){}
virtual ~CObserver(){}
virtual void Update(CSubject* pSubject) = ;
}; //目标即主题,可理解为由于本对象变化导致其他对象跟随变化
class CSubject
{
public:
void Attach(CObserver* pO)
{
_ls.push_back(pO);
}
void Detach(CObserver* pO)
{
_ls.remove(pO);
}
void Notify()
{
for (list<CObserver*>::iterator it=_ls.begin();it!=_ls.end();it++)
{
(*it)->Update(this);
}
}
private:
list<CObserver*> _ls;
}; //猫为观察者
class CCat:public CObserver
{
public:
CCat(){}
virtual ~CCat(){}
virtual void Update(CSubject* pSubject){
Say();
}
void Say()
{
printf("猫叫了\r\n");
}
}; //人为观察者
class CPerson:public CObserver
{
public:
CPerson(){}
virtual ~CPerson(){} virtual void Update(CSubject* pSubject){
Say();
}
void Say()
{
printf("人醒了\r\n");
}
}; //老鼠为主题
class CMouse:public CSubject
{
public: void Say()
{
printf("老鼠叫了\r\n");
Notify();
}
};
 int _tmain(int argc, _TCHAR* argv[])
{ //老鼠跑猫叫主人醒
CMouse* pMouse = new CMouse();
CCat* pCat = new CCat();
CPerson* pPerson = new CPerson(); pMouse->Attach(pCat);
pMouse->Attach(pPerson);
pMouse->Say();
  
return ;
}

main里指针没做释放,如何优雅的释放呢,还在考虑中,如果讲究对称美,那就是

 int _tmain(int argc, _TCHAR* argv[])
{ //老鼠跑猫叫主人醒
CMouse* pMouse = new CMouse();
CCat* pCat = new CCat();
CPerson* pPerson = new CPerson(); pMouse->Attach(pCat);
pMouse->Attach(pPerson);
pMouse->Say(); //对称美,但是如此麻烦,还有其他解决方法吗
pMouse->Detach(pCat);
pMouse->Detach(pPerson);
delete pPerson;
delete pCat;
delete pMouse; return ;
}

欢迎各位发表观点

老鼠跑猫叫主人惊醒c++观察者模式实现的更多相关文章

  1. 以【猫叫、老鼠跑、主人醒】为例子,使用 javascript 来实现 观察者模式 (有在线演示)

    “猫叫.老鼠跑.主人醒”是一个很古老的话题了,大家也都有各自的想法和解决方案.我也是看了很多,一开始的时候是相当的迷糊,这个怎么就是面试题了?考的是啥呀,和编程有关系吗?又是猫又是老鼠的,晕死了.后来 ...

  2. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

    要求:  1.要有联动性,老鼠和主人的行为是被动的.  2.考虑可扩展性,猫的叫声可能引起其他联动效应. 我么能事件来一步一步来实现: 将要执行的老鼠逃跑,和主人惊醒的行为注册到事件中,猫叫之后引发事 ...

  3. 设计模式のObserver Pattern(观察者模式)----行为模式

    一.问题产生背景 又被称为订阅发布模式. 最初流传最广的一个面试题:有一只猫咪,猫咪叫了一声,老鼠跑了,老人惊醒了,男主人骂,小偷吓得不敢动了....这就产生一个问题的模型,当对象间存在一对多关系时, ...

  4. C#设计模式 - 观察者模式(使用委托)

    1.概念 观察者模式(有时又被称为发布-订阅Subscribe>模式.模型-视图View>模式.源-收听者Listener>模式或从属者模式)是软件设计模式的一种.在此种模式中,一个 ...

  5. 使用 javascript 来实现 观察者模式

    以[猫叫.老鼠跑.主人醒]为例子,使用 javascript 来实现 观察者模式 (有在线演示) 2013-06-24 08:35 by 金色海洋(jyk)阳光男孩, 572 阅读, 4 评论, 收藏 ...

  6. (C#)算法题

    1. Convert string from "AAABBCC" to "A3B2C2". 当面试者提出这个问题的时候,首先需要确认题意:譬如:字符串是不是顺序 ...

  7. 彻底搞清楚c#中的委托和事件

    一.什么是委托呢? 听着名字挺抽象,确实不好理解.面试官最喜欢考察这个,而且更喜欢问:“委托和事件有何异同?”.如果对一些知识点没有想明白,那么很容易被绕进去.研究任何事物,我们不妨从它的定义开始,委 ...

  8. .NET面试题总结

    1.c#垃圾回收机制 从以下方面入手展开:  1.压缩合并算法   2.代的机制  3.GC调用终结器 2.委托和事件 先说它的定义:委托的本质是类,类型安全的指针,然后从用途上考虑,事件是包装的委托 ...

  9. C# 常见面试问题汇总

    1.c#垃圾回收机制 从以下方面入手展开:  1.压缩合并算法   2.代的机制  3.GC调用终结器 Garbage Collector . NET采用了和Java类似的方法由CLR(Common ...

随机推荐

  1. PHP接口使用

    <?php interface IEmployee { function working(); } interface IDeveloper { function Coding(); } cla ...

  2. 从RTSP协议SDP数据中获得二进制的SPS、PPS

    在RTSP协议的交互过程中,第二步客户端发送DESCRIBE请求之后,服务端会返回SDP内容,该SDP内容中有关于媒体和会话的描述,本篇文章主要给出如何从SDP字符串中得到H264视频信息中的sps. ...

  3. UML建模语言入门 -- 用例视图详解 用例视图建模实战

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 一. 用例视图概述 用例视图表述哪些 ...

  4. 地址转换协议ARP

    地址转换协议ARP 在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址.而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址.这就导致在以太 ...

  5. error at ::0 can't find referenced pointcut解决办法(转载)

    原文:http://blog.sina.com.cn/s/blog_9ecb0d9d0101fheg.html Spring中采用annotation的方式实现AOP代理,运行测试代码时抛出以下异常: ...

  6. atitit.spring3 mvc url配置最佳实践

    atitit.spring3 mvc url配置最佳实践 1. Url-pattern  bp 1 2. 通用星号url pattern的问题 1 3. Other code 1 4. 参考 2 1. ...

  7. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  8. 取代奶瓶Minidwep-gtk破解WPA 全攻略

    取代奶瓶Minidwep-gtk 破 WPA 全攻略  目录 1. CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2. 自带的字典破解不出密码时使用 U 盘外挂字典继 ...

  9. 【地图API】收货地址详解2

    上次讲解的方法是: 在地图中心点添加一个标注,每次拖动地图就获取地图中心点,再把标注的位置设置为地图中心点.可参考教程:http://www.cnblogs.com/milkmap/p/6126424 ...

  10. [转]PROE传动链条的装配教程

    转自: 原文连接:PROE动链条的装配教程 传动链条的装配