责任链模式

在军队中,一般根据战争规模的大小和重要性由不同的长官(Officer)来下达作战命令,情报人员向上级递交军情(如敌人的数量),作战命令需要上级批准,如果直接上级不具备下达命令的权利,则上级又传递给上级,直到有人可以决定为止,这类似我们课本中学习的责任链模式。可以通过责任链模式来模拟该过程,客户类(Client)模拟情报人员,首先向级别最低的班长(Banzhang)递交任务书(Mission),即军情,如果超出班长的权利范围,则传递给排长(Paizhang),排长如果也不能处理则递交给营长(Yingzhang),如果营长也不能处理,则需要开会讨论。我们设置这几级长官的权利范围分别是:
(1) 敌人的数量<10,班长下达作战命令。
(2) 10<=敌人的数量<=50,排长下达作战命令。
(3) 50<=敌人的数量<=200,营长下达作战命令。
(4)敌人的数量>200,需要开会讨论再下达作战命令。

UML图:

这里写图片描述

Mission类

public class Mission {
    private String mission; 
    private int enemyNumber; 
    public Mission() {
        super();
    }
    public Mission(String mission, int enemyNumber) {
        super();
        this.mission = mission;
        this.enemyNumber = enemyNumber;
    }
    public String getMission() {
        return mission;
    }
    public void setMission(String mission) {
        this.mission = mission;
    }
    public int getEnemyNumber() {
        return enemyNumber;
    }

    public void setEnemyNumber(int enemyNumber) {
        this.enemyNumber = enemyNumber;
    }
}

Officer类

public abstract class Officer {
    protected String name;
    protected Officer successor;

    public Officer(String name) {
        this.name = name;
    }
    public void setSuccessor(Officer successor) {
        this.successor = successor;
    }
    public abstract void handleMission(Mission mission);
}

Banzhang类

public class Banzhang extends Officer{
    public Banzhang(String name) {
        super(name);
    }
    @Override
    public void handleMission(Mission mission) {
        if(mission.getEnemyNumber()>0 && mission.getEnemyNumber()<10){
            System.out.println(name+"接到"+mission.getMission()+"的军情"+",敌人数量为"+mission.getEnemyNumber()+",可以下达作战指令");
        }else{
            if(this.successor!=null)
            {
                this.successor.handleMission(mission);
            }
        }
    }
}

Paizhang类

public class Paizhang extends Officer {
    public Paizhang(String name) {
        super(name);
    }
    @Override
    public void handleMission(Mission mission) {
        if (mission.getEnemyNumber() >= 10 && mission.getEnemyNumber() < 50) {
            System.out
                    .println(name + "接到" + mission.getMission()
                            + "的军情" + ",敌人数量为" + mission.getEnemyNumber()
                            + ",可以下达作战指令");
        } else {
            if (this.successor != null) {
                this.successor.handleMission(mission);
            }
        }
    }
}

Yingzhang类

public class Yingzhang extends Officer {
    public Yingzhang(String name) {
        super(name);
    }
    @Override
    public void handleMission(Mission mission) {
        if (mission.getEnemyNumber() >= 50 && mission.getEnemyNumber() < 200) {
            System.out
                    .println(name + "接到" + mission.getMission()
                            + "的军情" + ",敌人数量为" + mission.getEnemyNumber()
                            + ",可以下达作战指令");
        } else {
            System.out
                    .println("接到" + mission.getMission() + "的军情" + ",敌人数量为"
                            + mission.getEnemyNumber() + ",敌人太多了,开会讨论!");
        }
    }
}

Client类

public class Client {
    public static void main(String[] args) {
        Officer Bangzhang = new Banzhang("王班长");
        Officer Paizhang = new Paizhang("赵排长");
        Officer Yingzhang = new Yingzhang("王营");
        Bangzhang.setSuccessor(Paizhang);
        Paizhang.setSuccessor(Yingzhang);
        Mission m1 = new Mission("mission1", 3);
        Bangzhang.handleMission(m1);
        Mission m2 = new Mission("mission2", 38);
        Bangzhang.handleMission(m2);
        Mission m3 = new Mission("mission3", 100);
        Bangzhang.handleMission(m3);
        Mission m4 = new Mission("mission4", 400);
        Bangzhang.handleMission(m4);
    }
}

运行结果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值