源代码:
// 文件: observer_pattern/Guancha.java
package observer_pattern;
public interface Guancha {
void sheng(); // 股票上涨时的动作
void jiang(); // 股票下跌时的动作
}
// 文件: observer_pattern/Gumin.java
package observer_pattern;
public class Gumin implements Guancha {
private String name;
public Gumin(String a) {
this.name = a;
}
@Override
public void sheng() {
System.out.println(name + " 买了一些股票(股票升了)");
}
@Override
public void jiang() {
System.out.println(name + " 哭了(股票降价了)");
}
}
// 文件: observer_pattern/Fen.java
package observer_pattern;
import java.util.ArrayList;
public class Fen {
private ArrayList<Guancha> oblist;
public Fen() {
oblist = new ArrayList<>();
}
public void add(Guancha a) {
oblist.add(a);
}
public void remove(Guancha a) {
oblist.remove(a);
}
public void notifySheng(double a) {
if (a >= 0.05) {
for (Guancha guan : oblist) {
guan.sheng(); // 通知所有观察者股票上涨
}
}
}
public void notifyJiang(double a) {
if (a >= 0.05) {
for (Guancha guan : oblist) {
guan.jiang(); // 通知所有观察者股票下跌
}
}
}
}
// 文件: observer_pattern/Main.java
package observer_pattern;
public class Main {
public static void main(String[] args) {
Fen fen = new Fen();
Gumin g1 = new Gumin("第一个股民");
Gumin g2 = new Gumin("第二个股民");
fen.add(g1);
fen.add(g2);
System.out.println("股票升了");
fen.notifySheng(0.06); // 股票上涨 6%
System.out.println("\n股票降了");
fen.notifyJiang(0.10); // 股票下跌 10%
System.out.println("\n股票升了(小于5%)");
fen.notifySheng(0.04); // 股票上涨 4%,未通知
System.out.println("\n股票降了(小于5%)");
fen.notifyJiang(0.03); // 股票下跌 3%,未通知
}
}