【设计模式】观察者模式
加州新建了一家银行,一伙无耻之徒串通银行里的内贼,准备趁夜晚守备松懈的时候抢劫银行
/** * 坏人抽象类,所有坏人都实现此接口 */ public interface BadGuy { void rob(); //所有坏人都有一个抢劫的方法 }
/** * 银行内贼接口,所有银行类实现此接口 */ public interface BankTraitor { void notifyBadGuys(); //通知所有坏人 //依赖抽象BadGuy,不依赖具体 void addBadGuy(BadGuy badGuy); //增加坏人入伙 String getBankName(); //获取要抢劫银行名字 }
无耻之徒团伙有:开锁的小偷【Thief】和持枪的劫匪【Bandit】
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。/** * 开锁小偷 */ public class Thief implements BadGuy { //依赖抽象,不依赖具体 private BankTraitor bankTraitor; public Thief(BankTraitor bankTraitor) { this.bankTraitor = bankTraitor; } @Override public void rob() { System.out.println("我是小偷,准备开锁" + bankTraitor.getBankName()); } }
内贼是在加州银行的内贼
/** * 加州银行,抢窃的目标银行 */ public class CaliforniaBank implements BankTraitor{ /** * 抢劫银行的所有坏人的名单 */ private List<BadGuy> badGuysUnion = new ArrayList(); //银行名字 private String bankName ; public CaliforniaBank(String bankName) { this.bankName = bankName; } @Override public void notifyBadGuys() { System.out.println("内贼:守备松懈,准备行动"); for (BadGuy badGuy : badGuysUnion) { badGuy.rob(); } } @Override public void addBadGuy(BadGuy badGuy) { badGuysUnion.add(badGuy); } @Override public String getBankName() { return bankName; } }
具体作案结果:
public class Main { public static void main(String[] args) { //加州新建了一家银行 CaliforniaBank californiaBank = new CaliforniaBank( "CaliforniaBank"); //劫匪们盯上了加州银行 Thief thief = new Thief(californiaBank); Bandit bandit = new Bandit(californiaBank); //于是找到了银行里的内贼 californiaBank.addBadGuy(thief); californiaBank.addBadGuy(bandit); //守备松懈的时候,内贼通知坏人动手 californiaBank.notifyBadGuys(); } }
结果:
内贼:守备松懈,准备行动
我是小偷,准备开锁CaliforniaBank
我是抢匪,我准备持枪进入CaliforniaBank

更多精彩