程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ´ó»°Éè¼ÆģʽC++ʵÏÖ-µÚ14ÕÂ-¹Û²ìÕßģʽ

´ó»°Éè¼ÆģʽC++ʵÏÖ-µÚ14ÕÂ-¹Û²ìÕßģʽ

編輯:C++入門知識

´ó»°Éè¼ÆģʽC++ʵÏÖ-µÚ14ÕÂ-¹Û²ìÕßģʽ


Ò»¡¢UMLͼ

\

¶þ¡¢¸ÅÄî

¹Û²ìÕßģʽ£º¶¨ÒåÁËÒ»ÖÖÒ»¶Ô¶àµÄÒÀÀµ¹Øϵ£¬Èöà¸ö¹Û²ìÕ߶ÔÏóͬʱ¼àÌýijһÖ÷Ìâ¶ÔÏó¡£Õâ¸öÖ÷Ìâ¶ÔÏóÔÚ״̬·¢Éú±ä»¯Ê±£¬»á֪ͨËùÓй۲ìÕ߶ÔÏó£¬Ê¹ËûÃÇÄܹ»×Ô¶¯¸üÐÂ×Ô¼º¡£<†·Ÿ"http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz7I/aGiy7XD9zwvc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz69x8mro7o8L3N0cm9uZz48L3A+CjxwPjxzdHJvbmc+o6gxo6lTdWJqZWN0wOCjujwvc3Ryb25nPr/J0tS3rdLrzqrW98ziu/LV37Ppz/PNqNaq1d+jrNK7sOPTw9K7uPaz6c/zwOC78tXf0ru49r3Tv9rKtc/WoaPL+7DRy/nT0LbUuduy7NXfttTP87XE0v3Tw7GjtObU2tK7uPa+27yvwO+jrMO/uPbW98zitry/ydLU09DIzrrOyv3Bv7XEuduy7NXfoaOz6c/z1vfM4szhuanSu7j2vdO/2qOsv8nS1NT2vNO6zcm+s/2527Ls1d+21M/zoaM8L3A+CjxwPjxzdHJvbmc+o6gyo6lPYnNlcnZlcsDgo7o8L3N0cm9uZz6z6c/zuduy7NXfo6zOqsv509C1xL7fzOW527Ls1d+2qNLl0ru49r3Tv9qjrNTatcO1vdb3zOK1xM2o1qrKsbj80MLX1Ly6oaPV4rj2vdO/2r3Q1/a4/NDCvdO/2qGjs+nP87nbsuzV39K7sOPTw9K7uPaz6c/zwOC78tXf0ru49r3Tv9rKtc/WoaO4/NDCvdO/2s2os6Ow/Lqs0ru49lVwZGF0ZSgpt723qKOs1eK49re9t6i90Nf2uPzQwre9t6ihozwvcD4KPHA+PHN0cm9uZz6jqDOjqUNvbmNyZXRlU3ViamVjdMDgo7o8L3N0cm9uZz690Nf2vt/M5db3zOK78tXfvt/M5c2o1qrV36OsvavT0LnY17TMrLTmyOu+38zluduy7NXfttTP86O71Nq+38zl1vfM4rXExNqyv9e0zKy4xLHkyrGjrLj4y/nT0LXHvMe5/bXEuduy7NXft6Kz9s2o1qqhozwvcD4KPHA+PHN0cm9uZz6jqDSjqUNvbmNyZXRlT2JzZXJ2ZXLA4KO6PC9zdHJvbmc+vt/M5bnbsuzV36OsyrXP1rPpz/O527Ls1d+9x8mry/nSqsfztcS4/NDCvdO/2qOs0tSx48q5sb7J7bXE17TMrNPr1vfM4rXE17TMrM/g0K2196Gjvt/M5bnbsuzV373Hyau/ydLUsaO05tK7uPbWuM/yvt/M5db3zOK21M/ztcTS/dPDoaM8L3A+CjxwPjxzdHJvbmc+yrLDtMqxuvLTw7nbsuzV38Sjyr2jvzwvc3Ryb25nPjwvcD4KPHA+o6gxo6m1sdK7uPa21M/ztcS4xLHk0OjSqs2syrG4xLHkxuTL+7bUz/O1xMqxuvKjuzwvcD4KPHA+o6gyo6m2+MfSsrvWqrXAvt/M5dPQtuDJ2bbUz/PT0LT9uMSx5Mqxo6zTprjDv7zCx8q508O527Ls1d/Eo8q9o7s8L3A+CjxwPqOoM6OptbHSu7j2s+nP88Sj0M3T0MG9uPa3vcPmo6zG5NbQ0ru3vcPm0sDAtdPawe3Su7e9w+ajrNXiyrHTw7nbsuzV38Sjyr2/ydLUvavV4sG91d+34tew1Nq2wMGitcS21M/z1tDKucv7w8e499fUtsDBorXYuMSx5LrNuLTTw6GjPC9wPgo8cD48c3Ryb25nPrG+1sqjujwvc3Ryb25nPjwvcD4KPHA+uduy7NXfxKPKvcv51/a1xLmk1/fG5Mq1vs3Kx9TaveKz/fHuus+jrMjD8e66z7XEy6u3vba80sDAtdPas+nP86Ostviyu8rH0sDAtdPavt/M5aGjtNO2+Mq5tcO499fUtcSx5Luvtryyu7vh07DP7MHt0rux37XEseS7r6GjPC9wPgo8cD48c3Ryb25nPsvEoaJDJiM0MzsmIzQzO8q1z9Y8L3N0cm9uZz48L3A+CjxwPqOoMaOpU3ViamVjdC5oPC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;">#ifndef SUBJECT_H #define SUBJECT_H #include #include class Observer; //Subject£¬³éÏó֪ͨÕß»òÕßÖ÷Ìâ class Subject { protected: std::string SubjectState; public: virtual void Attach(Observer* observer)=0; virtual void Detach(Observer* observer)=0; virtual void Notify()=0; std::string GetSubjectState(); void SetSubjectState(std::string state); }; //ConcreteSubject£¬¾ßÌå֪ͨÕß»òÕß¾ßÌåÖ÷Ìâ¡£ class Boss:public Subject { private: std::list observers; std::string action; public: void Attach(Observer* observer); void Detach(Observer* observer); void Notify(); }; #endif

£¨2£©Subject.cpp

#include "Subject.h"
#include "Observer.h"

std::string Subject::GetSubjectState()
{
	return SubjectState;
}
void Subject::SetSubjectState(std::string state)
{
	this->SubjectState=state;
}

void Boss::Attach(Observer* observer)
{
	observers.push_back(observer);
}
void Boss::Detach(Observer* observer)
{
	std::list::iterator it;
	for(it=observers.begin();it!=observers.end();it++)
	{
		if(*it==observer)
		{
			observers.erase(it);
			break;
		}
	}
}
void Boss::Notify()
{
	std::list::iterator it;
	for(it=observers.begin();it!=observers.end();it++)
	{
		(**it).Update();
	}
}


£¨3£©Observer.h

#ifndef OBSERVER_H
#define OBSERVER_H

#include 
#include 
#include 
#include "Subject.h"

//Observer,³éÏó¹Û²ìÕß
class Observer
{
protected:
	std::string name;
	Subject* sub;
public:
	Observer();
	Observer(std::string name,Subject* sub);
	virtual void Update();
	bool operator==(const Observer&)const;
};

//ConcreteObserver,¾ßÌå¹Û²ìÕߣ¬¹ÉƱ¹Û²ìÕß
class StockObserver:public Observer
{
public:
	StockObserver();
	StockObserver(std::string name,Subject* sub);
	void Update();
};


//ConcreteObserver£¬¾ßÌå¹Û²ìÕߣ¬NBA¹Û²ìÕß
class NBAObserver:public Observer
{
public:
	NBAObserver();
	NBAObserver(std::string name,Subject* sub);
	void Update();
};

#endif


£¨4£©Observer.cpp

#include "Observer.h"

Observer::Observer(){}

Observer::Observer(std::string name,Subject* sub)
{
	this->name=name;
	this->sub=sub;
}

void Observer::Update()
{
	std::cout<<"Observer.Update()"<name==observer.name)&&(this->sub==observer.sub);
}


StockObserver::StockObserver(){}

StockObserver::StockObserver(std::string name,Subject* sub)
{
	this->name=name;
	this->sub=sub;
}

void StockObserver::Update()
{
	std::cout<GetSubjectState()<<" "<name=name;
	this->sub=sub;
}

void NBAObserver::Update()
{
	std::cout<GetSubjectState()<<" "<

£¨5£©Client.cpp


#include "Observer.h"
#include 
#include 

//Client£¬¿Í»§¶Ë
void main()
{
	//֪ͨÕß
	Subject* huhansan=new Boss();

	//4¸ö¹Û²ìÕßʵÀý
	Observer* tongshi1=new StockObserver("κ¹Øæ±",huhansan);
	Observer* tongshi2=new StockObserver("Ò׹ܲì",huhansan);
	Observer* tongshi3=new NBAObserver("»ô»ªµÂ",huhansan);
	Observer* tongshi4=new NBAObserver("ÁÖÊéºÀ",huhansan);

	//½«4¸ö¹Û²ìÕ߶¼¼ÓÈ뵽֪ͨÕßµÄ֪ͨ¶ÓÁÐÖÐ
	huhansan->Attach(tongshi1);
	huhansan->Attach(tongshi2);
	huhansan->Attach(tongshi3);
	huhansan->Attach(tongshi4);
	
	//κ¹Øæ±Ã»Óб»ÀÏ°å֪ͨµ½£¬¼õÈ¥¡£
	huhansan->Detach(tongshi1);

	huhansan->SetSubjectState("ÎÒºúººÈý»ØÀ´ÁË£¡");

	//֪ͨ
	huhansan->Notify();

	delete huhansan;
	delete tongshi1;
	delete tongshi2;
	delete tongshi3;
	delete tongshi4;

	std::cout<<""<

£¨6£©ÔËÐнØͼ





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved