观察者模式
package com.Observer;
import java.util.ArrayList;
public abstract class MySubject {
protected ArrayList observers=new ArrayList();
//注册方法
public void attach(MyObserver
observer){
observers.add(observer);
}
//注销方法
public void detach(MyObserver
observer){
observers.remove(observer);
}
public abstract void cry(String state);//抽象通知方法
}
package com.Observer;
public interface MyObserver {
void response(String state);//抽象相应方法
}
package com.Observer;
public class Shares extends MySubject{
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public void cry(String state){
this.state=state;
System.out.printf(state);
System.out.printf("-------------------------");
for(Object obs:observers){
((MyObserver)obs).response(state);
}
}
}
package com.Observer;
public class People implements MyObserver{
public void response(String state){
if(state.equals("股票下降")) {
System.out.printf("股民大哭一场\n");
}else if(state.equals("股票上涨")) {
System.out.printf("股民买股票\n");
}
}
}
package com.Observer;
public class Client {
public static void main(String[] args) {
MySubject subject=new Shares();
MyObserver obs1;
obs1=new People();
subject.attach(obs1);
subject.cry("股票下降");
subject.cry("股票上涨");
}
}
2.C++
#include <iostream>
#include <list>
#include<algorithm>
#include<sstream>
#include<stack>
#include <queue>
#include <list>
using namespace std;
class MyObserver
{
public:
virtual void response(string state) = 0;
bool operator==(const MyObserver& obj) const
{
return 1==1;
}
};
class MySubject
{
protected:
list<MyObserver*> observers;
public:
void attach(MyObserver* observer)
{
observers.push_back(observer);
}
void detach(MyObserver* observer)
{
observers.remove(observer);
}
virtual void cry(string state) = 0;
};
class Shares : public MySubject
{
private:
string state;
public:
string getState()
{
return this->state;
}
void setState(string state)
{
this->state = state;
}
void cry(string state)
{
this->state = state;
cout << state << endl;
list<MyObserver*>::iterator iter1;
for (iter1 = observers.begin(); iter1 != observers.end(); iter1++)
{
(**iter1).response(state);
}
cout << "***********************************" << endl;
}
};
class People : public MyObserver
{
public:
void response(string state)
{
if (state.compare("股票下降")==0) {
cout << "股民大哭一场\n";
}
else if (state.compare("股票上涨")==0) {
cout << "股民买股票\n";
}
}
};
int main()
{
MySubject* subject = new Shares();
MyObserver* obs1 =new People();
(*subject).attach(obs1);
(*subject).cry("股票下降");
(*subject).cry("股票上涨");

浙公网安备 33010602011771号