加州新建了一家银行,一伙无耻之徒串通银行里的内贼,准备趁夜晚守备松懈的时候抢劫银行

/**
 * 坏人抽象类,所有坏人都实现此接口
 */
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

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄