23种设计模式之(十八)观察者模式(python_c++实现)

23种设计模式之(十八)观察者模式(Observer)

本文主要介绍23种设计模式之观察者模式,附详细python/c++示例代码。

  • 概念
  • 应用场景
  • 注意事项
  • 代码示例
  • 总结
  • 代码链接

观察者模式(Observer)

概念

观察者模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。

观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。

GoF对观察者模式的定义是:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

应用场景

(1)、 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
(2)、一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
(3)、一个对象必须通知其他对象,而并不知道这些对象是谁。

C++代码示例

/************************************************************************/
/* 设计模式专题
/*
/* 观察者模式
/*
/* Author  : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date    : 20180918
/************************************************************************/

#include <iostream>
#include "string"
#include "list"


class Secretary;


//观察者 
class PlayserObserver
{
public:
	PlayserObserver(Secretary *secretary)
	{
		this->m_secretary = secretary;
	}
	void update(std::string action)
	{
		printf("action:%s\n",action.c_str());

	}
private:
	Secretary *m_secretary;
};
//
class Secretary
{
public:
	Secretary()
	{
		m_list.clear();
	}
	void Notify(std::string info)
	{
		//给所有的 观察者 发送 情报
		for ( std::list<PlayserObserver *>::iterator it=m_list.begin(); it!=m_list.end(); it++)
		{
			(*it)->update(info); 
		}
	}

	void setPlayserObserver(PlayserObserver *o)
	{
		m_list.push_back(o);
	}

private:
	std::list<PlayserObserver *> m_list;
};
void main()
{
	Secretary			*secretary = NULL;
	PlayserObserver		*po1 = NULL;
	PlayserObserver		*po2 = NULL;

	secretary = new Secretary;
	po1 = new PlayserObserver(secretary);
	po2 = new PlayserObserver(secretary);

	secretary->setPlayserObserver(po1);
	secretary->setPlayserObserver(po2);

	secretary->Notify("boss come ") ;
	secretary->Notify("boss gone ");
	delete secretary ;
	delete po1 ;
	delete po2 ;
}

python代码示例

# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
# 
# 观察者模式
# 
# Author  : zzl
# 
# 编程环境: window10 python2.7
# 
# Date    : 20180918
##################################################################


# 观察者
class PlayserObserver(object):
    def __init__(self, secretary):
        self.m_secretary = secretary

    def update(self, action):
        print("action:%s" % action)


class Secretary(object):
    def __init__(self):
        self.m_list = []

    def show_notify(self, info):
        # 给所有的 观察者 发送 情报
        for every in self.m_list:
            every.update(info)

    def set_playser_observer(self, observer):
        self.m_list.append(observer)


if __name__ == "__main__":
    secretary = Secretary()
    po1 = PlayserObserver(secretary)
    po2 = PlayserObserver(secretary)
    secretary.set_playser_observer(po1)
    secretary.set_playser_observer(po2)

    secretary.show_notify("boss come ")
    secretary.show_notify("boss gone ")

源码链接

设计模式(十八)观察者模式示例代码(python–c++)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值