背景
联邦军在各个地区都有驻军。最近欧洲、亚洲、美洲联邦军大批采购了古铁,并希望能够随时收到古铁工厂的消息(优惠通知、到货通知等)。后来,欧洲联邦军在使用古铁作战时,发现古铁并不适用于欧洲高强度的战役,故欧洲联邦军第一时间停止了对古铁工厂的订阅,也收不到古铁工厂发来的消息。我们来看下具体是什么情况?
实现
工厂订阅者接口
/**
* 工厂订阅者抽象类
*/
public interface FactorySubject {
/**
* 注册观察者
*/
void registObserver(OrgObserver o);
/**
* 移除观察者
*/
void removeObserver(OrgObserver o);
/**
* 通知观察者
*/
void notifyObserver();
}
组织观察者接口
/**
* 组织观察者,比如亚洲联邦军、美洲联邦军都是组织,观察来自工厂的通知
*/
public interface OrgObserver {
/**
* 显示通知
*/
void showNotify(String notice);
}
亚洲联邦军
public class AsianOrg implements OrgObserver {
@Override
public void showNotify(String notice) {
System.out.println("亚洲联邦军你们好!这是最新的消息:" + notice);
}
}
欧洲联邦军
public class EuropeOrg implements OrgObserver {
@Override
public void showNotify(String notice) {
System.out.println("欧洲联邦军你们好!这是最新的消息:" + notice);
}
}
美洲联邦军
public class AmericaOrg implements OrgObserver {
@Override
public void showNotify(String notice) {
System.out.println("美洲联邦军你们好!这是最新的消息:" + notice);
}
}
古铁工厂
/**
* 古铁工厂
*/
public class AncientIronFactory implements FactorySubject {
private List<OrgObserver> observers = new ArrayList<>();
private String notice;
@Override
public void registObserver(OrgObserver o) {
observers.add(o);
}
@Override
public void removeObserver(OrgObserver o) {
if (observers.indexOf(o) != -1) {
observers.remove(o);
}
}
@Override
public void notifyObserver() {
for (OrgObserver observer : observers) {
observer.showNotify(notice);
}
}
public String getNotice() {
return notice;
}
public void setNotice(String notice) {
this.notice = notice;
notifyObserver();
}
}
测试
public class Test {
public static void main(String[] args) {
AsianOrg asianOrg = new AsianOrg();
EuropeOrg europeOrg = new EuropeOrg();
AmericaOrg americaOrg = new AmericaOrg();
AncientIronFactory factory = new AncientIronFactory();
// 三个联邦军组织在我这里订阅了古铁工厂的讯息
factory.registObserver(asianOrg);
factory.registObserver(europeOrg);
factory.registObserver(americaOrg);
// 最近古铁备货充足,通知下他们。
factory.setNotice("你们好,这是来自古铁工厂的通知,最近古铁备货充足,欢迎进购,祝生活愉快!");
System.out.println("---------------------------");
// 欧洲联邦军觉得古铁不适合欧洲战区,所以取消了古铁工厂的订阅
factory.removeObserver(europeOrg);
// 由于失去了一大客户,古铁工厂损失巨大,不得不将古铁的价格上调
factory.setNotice("你们好,这是来自古铁工厂的通知,由于最近物料匮乏,古铁的价格会上涨,但不会太多,请互相理解,谢谢!");
}
}
测试结果
亚洲联邦军你们好!这是最新的消息:你们好,这是来自古铁工厂的通知,最近古铁备货充足,欢迎进购,祝生活愉快!
欧洲联邦军你们好!这是最新的消息:你们好,这是来自古铁工厂的通知,最近古铁备货充足,欢迎进购,祝生活愉快!
美洲联邦军你们好!这是最新的消息:你们好,这是来自古铁工厂的通知,最近古铁备货充足,欢迎进购,祝生活愉快!
---------------------------
亚洲联邦军你们好!这是最新的消息:你们好,这是来自古铁工厂的通知,由于最近物料匮乏,古铁的价格会上涨,但不会太多,请互相理解,谢谢!
美洲联邦军你们好!这是最新的消息:你们好,这是来自古铁工厂的通知,由于最近物料匮乏,古铁的价格会上涨,但不会太多,请互相理解,谢谢!
总结
未完待续.