序文
この章では、責任のデザインパターンの知識のデザインパターンチェーンを記述する
方法
1.コンセプト
ゼネラルマネージャーで百万指示よりも貨物も大きくディレクターから未満千万命令、100,000を超えると、管理者が指示した商品の未満億の価値の機器、物品を購入するために財政資金を承認する会社:次のシナリオを想像してみてください。だから、どのようにこの論理はいますか?
その後、我々の最初の考えは他...場合に対処するために、伝統的な使用することですが、ビジネスのために維持することは非常に複雑で困難です。
上記の課題を解決するために承認プロセスの財務面では、私たちはより良いChain of Responsibilityパターンを使用します。
責任デザインパターンの考え方2.チェーンの実現
1)対応するプロジェクトを作成します
申込書のクラスの2)の調製
package chain;
/**
* 申请表
* @author jwang
*
*/
public class Apply {
private String name;
private int money;//以万为单位
public Apply(String name, int money) {
super();
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
3)責任抽象クラスのチェーンを作成します。
package chain;
/**
* 责任链抽象类
* @author jwang
*
*/
public abstract class Leader {
protected String name;
protected Leader nextLeader;//下一个领导
public Leader(String name) {
super();
this.name = name;
}
public void setNextLeader(Leader nextLeader) {
this.nextLeader = nextLeader;
}
//处理申请
public abstract void handleRequest(Apply apply);
}
4)責任特定のクラスのリーダー(ディレクター、マネージャー、ゼネラルマネージャー)のチェーンを作成します。
package chain;
/**
* 主任
* @author jwang
*
*/
public class Director extends Leader {
public Director(String name) {
super(name);
}
@Override
public void handleRequest(Apply apply) {
if(apply.getMoney()<10){
System.out.println("审批金额小于10万,"+this.name+"审批通过!");
}else {
//交给下一个领导审批
this.nextLeader.handleRequest(apply);
}
}
}
package chain;
/**
* 经理
* @author jwang
*
*/
public class Manager extends Leader {
public Manager(String name) {
super(name);
}
@Override
public void handleRequest(Apply apply) {
if(apply.getMoney()<100){
System.out.println("审批金额小于100万,"+this.name+"审批通过!");
}else {
//交给下一个领导审批
this.nextLeader.handleRequest(apply);
}
}
}
package chain;
/**
* 总经理
* @author jwang
*
*/
public class GeneralManager extends Leader {
public GeneralManager(String name) {
super(name);
}
@Override
public void handleRequest(Apply apply) {
if(apply.getMoney()>100){
System.out.println("审批金额大于100万,"+this.name+"审批通过!");
}
}
}
5)書き込みテストコード
package chain;
public class Test {
public static void main(String[] args) {
Apply apply1 = new Apply("材料费申请", 90);
Apply apply2 = new Apply("材料费申请", 120);
Leader a = new Director("张主任");
Leader b = new Manager("李经理");
Leader c = new GeneralManager("王总经理");
//设置领导顺序
a.setNextLeader(b);
b.setNextLeader(c);
a.handleRequest(apply1);
a.handleRequest(apply2);
}
}
プログラムの結果: