JAVA設計モデルの戦略モデル
4207 ワード
ポリシー・モードとは?
ポリシー・モードのメリットは何ですか?
せっけいげんり
ポリシー・モードには3つのオブジェクトがあります
インスタンス分析
シーン
解析
クラス図
コード1.ロールクラス
2.具体的なキャラクタークラス--King,Queen..
3.抽象戦略オブジェクトインタフェース-IWeaponBehavior
4.具体的な戦略対象類、AxeBehavior(斧使用)、KnifeBehavior(短刀使用)、SwordBehavior(剣使用)
5.ツールクラスToolsとテストクラスStrategyMode
6.運転結果
AxeBehavior King move SwordBehavior KnifeBehavior Queen move
, , , 。
ポリシー・モードのメリットは何ですか?
。
せっけいげんり
1. ( , , )
2. ,
3. ,
, ;
, 。
, , , 。
。
, , 。
ポリシー・モードには3つのオブジェクトがあります
1. :
2. :
3. :
, , 。
。
, 。
インスタンス分析
シーン
, , , ,
解析
Role, fight() , setWeapon();( )
, , ;( )
( )
クラス図
コード1.ロールクラス
package com.pattern.strategy.role;
import com.pattern.strategy.weapon.IWeaponBehavior;
public abstract class Role {
IWeaponBehavior mWeaponBehavior;
public void fight() {
if (mWeaponBehavior != null) {
mWeaponBehavior.useWeapon();
}
}
public void setWeaponBehavior (IWeaponBehavior weaponBehavior) {
mWeaponBehavior = weaponBehavior;
}
public abstract void move();
}
2.具体的なキャラクタークラス--King,Queen..
package com.pattern.strategy.role;
import com.pattern.strategy.util.Tools;
public class King extends Role {
@Override
public void move() {
Tools.print("King move");
}
}
package com.pattern.strategy.role;
import com.pattern.strategy.util.Tools;
public class Queen extends Role {
@Override
public void move() {
Tools.print("Queen move");
}
}
3.抽象戦略オブジェクトインタフェース-IWeaponBehavior
package com.pattern.strategy.weapon;
public interface IWeaponBehavior {
public void useWeapon();
}
4.具体的な戦略対象類、AxeBehavior(斧使用)、KnifeBehavior(短刀使用)、SwordBehavior(剣使用)
package com.pattern.strategy.weapon;
import com.pattern.strategy.util.Tools;
public class AxeBehavior implements IWeaponBehavior {
@Override
public void useWeapon() {
Tools.print("AxeBehavior");
}
}
package com.pattern.strategy.weapon;
import com.pattern.strategy.util.Tools;
public class KnifeBehavior implements IWeaponBehavior {
@Override
public void useWeapon() {
Tools.print("KnifeBehavior");
}
}
package com.pattern.strategy.weapon;
import com.pattern.strategy.util.Tools;
public class SwordBehavior implements IWeaponBehavior {
@Override
public void useWeapon() {
Tools.print("SwordBehavior");
}
}
5.ツールクラスToolsとテストクラスStrategyMode
package com.pattern.strategy.util;
public class Tools {
public static void print(String info) {
System.out.println(info);
}
}
package com.pattern.strategy;
import com.pattern.strategy.role.King;
import com.pattern.strategy.role.Queen;
import com.pattern.strategy.role.Role;
import com.pattern.strategy.weapon.AxeBehavior;
import com.pattern.strategy.weapon.KnifeBehavior;
import com.pattern.strategy.weapon.SwordBehavior;
public class StrategyMode {
public static void main(String[] args) {
Role role = new King();
role.setWeaponBehavior(new AxeBehavior());
role.fight();
role.move();
role.setWeaponBehavior(new SwordBehavior());
role.fight();
role = new Queen();
role.setWeaponBehavior(new KnifeBehavior());
role.fight();
role.move();
}
}
6.運転結果
AxeBehavior King move SwordBehavior KnifeBehavior Queen move