设计模式-观察者模式

某实时在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。


类图:

设计模式-观察者模式_第1张图片

实现代码:

抽象目标类Subject 

package ObserverPattern;

 

import java.util.ArrayList;

 

public abstract class Subject {

    

 

    protected ArrayList observers = new ArrayList<>();

 

 

    public void attach(Observer observer){

        observers.add(observer);

    }

 

    public void detach(Observer observer){

        observers.remove(observer);

    }

    public abstract void notice();

}

 

 

目标类ConcreteSubject 

package ObserverPattern;

 

public class ConcreteSubject extends Subject{

    @Override

    public void notice() {

        for (Object obs:observers){

            System.out.print(((Observer)obs).getName());

            ((Observer)obs).update();

        }

    }

}


抽象观察者类Observer 

package ObserverPattern;

 

public interface Observer {

    public String getName();

    public void setName(String name);

    public void update();

}

 

具体观察者类ConcreteObserver 

package ObserverPattern;

 

public class ConcreteObserver implements Observer {

    String name;

 

  public   ConcreteObserver(String name){

      this.name = name;

  }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    @Override

    public void update() {

        System.out.println(",您购买的股票价格变化,请注意");

    }

}

 

客户端类Client :

package ObserverPattern;

 

public class Client {

    public static void main(String[] args) {

        Subject subject = new ConcreteSubject();

        Observer observer1,observer2,observer3;

        observer1= new ConcreteObserver("张三");

        observer2 = new ConcreteObserver("李四");

        observer3 = new ConcreteObserver("王五");

        subject.attach(observer1);

        subject.attach(observer2);

        subject.attach(observer3);

        subject.notice();

    }

}


你可能感兴趣的:(设计模式)