デザインパターン - Chain Of Responsibility
【Chain Of Responsibilityパターンとは】
責任者(処理者)を鎖状にして、いずれだれか処理するようにする。
【Chain Of Responsibilityパターンのクラス図】
【Chain Of Responsibilityパターンのメリット】
動的に鎖状を変更できる。
ほか色々あるね・・・たぶん
【サンプル】
Responsibility.java |
package responsibility;
public abstract class Responsibility {
private Responsibility next;
protected Responsibility setNext(Responsibility responsibility) {
this.next = responsibility;
return next;
}
protected final void request(int money) {
if(canProcess(money)) {
process(money);
} else if(next != null) {
// 次の責任者に依頼
next.request(money);
} else {
// 誰も処理できない
System.out.println("だれも決済できませんでした!!");
}
}
protected abstract boolean canProcess(int money); // 決済可能か
protected abstract void process(int money); // 決済
}
|
Katyo.java |
package responsibility;
// 課長
public class Katyo extends Responsibility{
@Override
protected boolean canProcess(int money) {
if (money < 100000) {
return true;
}
return false;
}
@Override
protected void process(int money) {
System.out.println("課長が" + money + "円を処理しました。");
}
}
|
Border.java |
package responsibility;
// 部長
public class Butyo extends Responsibility{
@Override
protected boolean canProcess(int money) {
if (money < 500000) {
return true;
}
return false;
}
@Override
protected void process(int money) {
System.out.println("部長が" + money + "円を処理しました。");
}
}
|
Border.java |
package responsibility;
// 社長
public class Shatyo extends Responsibility{
@Override
protected boolean canProcess(int money) {
if (money < 1000000) {
return true;
}
return false;
}
@Override
protected void process(int money) {
System.out.println("社長が" + money + "円を処理しました。");
}
}
|
ResponsibilityTest.java |
package responsibility;
public class ResponsibilityTest {
/**
* @param args
*/
public static void main(String[] args) {
// int processMoney = 100000
Responsibility katyo = new Katyo();
Responsibility butyo = new Butyo();
Responsibility shatyo = new Shatyo();
// 責任連鎖
katyo.setNext(butyo).setNext(shatyo);
katyo.request(99999);
katyo.request(499999);
katyo.request(999999);
katyo.request(1000000);
}
}
|
実行結果 |
課長が99999円を処理しました。
部長が499999円を処理しました。
社長が999999円を処理しました。
だれも決済できませんでした!!
|