java实现观察者模式之股民的反应
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
package Lab21_Observer;
import java.util.ArrayList;
public class Invertor {
// 观察目标 股票
public static class Stock extends MySubject {
public String change(String state) {
if (state == "increase") {
System.out.println("股票价格上涨!");
System.out.println("----------------------------");
}
if (state == "decrease") {
System.out.println("股票价下跌!");
System.out.println("----------------------------");
}
for (Object obs : observers) {
((MyObserver) obs).response(state);
}
return state;
}
}
// 观察者 股民
public static class Investor implements MyObserver {
public void response(String change) {
if (change == "increase") {
System.out.println("股民继续买股票!");
System.out.println("----------------------------");
}
if (change == "decrease") {
System.out.println("股民大哭一场!");
System.out.println("----------------------------");
}
}
}
// 抽象观察者 观察者接口
public static interface MyObserver {
void response(String change); // 抽象响应方法
}
// 抽象观察目标
public static 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 String change(String state); // 抽象通知方法
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MySubject subject = new Stock();
MyObserver obs1;
obs1 = new Investor();
subject.attach(obs1);
subject.change("increase");
}
}