观察者模式

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("股票上涨");

 

}

posted @ 2021-11-15 12:21  xjspyx  阅读(39)  评论(0)    收藏  举报