Java/C++实现观察者模式--股票价格
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
类图:

Java代码:
public class Investor implements MyObserver { @Override public void response1() { // TODO Auto-generated method stub System.out.println("股民买股票"); } @Override public void response2() { // TODO Auto-generated method stub System.out.println("股民大哭一场"); } } public interface MyObserver { void response1(); void response2(); } public class Stock extends Subject{ @Override public void stockUp() { // TODO Auto-generated method stub System.out.println("股票上涨5%"); for(Object obs:observers) { ((MyObserver)obs).response1(); } } @Override public void stockDown() { // TODO Auto-generated method stub System.out.println("股票下降5%"); for(Object obs:observers) { ((MyObserver)obs).response2(); } } } import java.util.ArrayList; public abstract class Subject { protected ArrayList observers=new ArrayList(); //注册方法 public void attach(MyObserver observer) { observers.add(observer); } //注销方法 public void detach(MyObserver observer) { observers.remove(observer); } public abstract void stockUp(); public abstract void stockDown(); } public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Subject subject=new Stock(); MyObserver obs1; obs1=new Investor(); subject.attach(obs1); subject.stockUp(); subject.stockDown(); } }
C++代码:
#include <iostream> #include <vector> #include <algorithm> using namespace std; class MyObserver { public: virtual void response1() = 0; virtual void response2() = 0; }; class Investor:public MyObserver { public: void response1(){ cout<<"股民买股票"<<endl; } void response2(){ cout<<"股民大哭一场"<<endl; } }; class Subject { public: Subject(){} virtual ~Subject(){} virtual void attach(MyObserver *observer)=0; virtual void detach(MyObserver *observer)=0; virtual void stockUp()=0; virtual void stockDown()=0; }; class Stock:public Subject { public: void attach(MyObserver *observer) { observers.push_back(observer); } void detach(MyObserver *observer) { vector<MyObserver*>::iterator observer_rm = find(observers.begin(), observers.end(), observer); observers.erase(observer_rm); } void stockUp() { cout<<"股票上涨5%"<<endl; vector <MyObserver *>::iterator iObserver = observers.begin(); while(iObserver != observers.end()) { (*iObserver)->response1(); iObserver++; } } void stockDown() { vector <MyObserver *>::iterator iObserver = observers.begin(); cout<<"股票下降5%"<<endl; while(iObserver != observers.end()) { (*iObserver)->response2(); iObserver++; } } private: vector<MyObserver*> observers; }; int main() { Stock subject; Investor obs; subject.attach(&obs); subject.stockUp(); subject.stockDown(); }
运行结果:



浙公网安备 33010602011771号