JAVA設計モデルの戦略モデル


ポリシー・モードとは?
     ,      ,           ,                   。

ポリシー・モードのメリットは何ですか?

せっけいげんり
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