Head Frist設(shè)計模式-策略模式

1.什么是策略模式

策略模式定義了算法簇,分別封裝起來,讓他們之間可以相互替換,讓算法的變化獨立于使用算法的客戶。

2.設(shè)計原則

1.找出應(yīng)用中的變化之處,把他們獨立出來,不要和變化的代碼混在一起,系統(tǒng)變的有彈性。
2.面向接口編程,而不是面向?qū)崿F(xiàn)類編程。
3.多用組合,少用繼承。


設(shè)計一個動作冒險游戲,存在游戲角色和使用武器行為的類,每個角色一次只能使用一種武器,但是可以在游戲的過程中換武器。
1.首先設(shè)計一個武器使用武器行為的接口,將變化抽象出來。

package strategy;

/**
 * 使用武器行為的接口
 */
public interface WeaponBehavior {
    /**
     * 使用武器
     */
    void useWeapon();
}

2.實現(xiàn)具體的武器類,實現(xiàn)武器行為接口。

package strategy;

/**
 * 斧頭武器的實現(xiàn)
 */
public class AxeBehavior implements WeaponBehavior {
    @Override
    public void useWeapon() {
        System.out.println("使用斧頭劈砍");
    }
}

package strategy;
/**
 * 寶劍武器的實現(xiàn)
 */
public class SwordBehavior implements WeaponBehavior {
    @Override
    public void useWeapon() {
        System.out.println("使用寶劍戰(zhàn)斗");
    }
}

package strategy;

/**
 * 匕首武器的實現(xiàn)
 */
public class KnifeBehavior implements WeaponBehavior {
    @Override
    public void useWeapon() {
        System.out.println("使用匕首刺殺");
    }
}


3.設(shè)計游戲角色的抽象類,持有武器行為的接口

package strategy;

/**
 * 游戲角色的抽象類
 */
public abstract class Character {
    /**
     * 將變化的封裝起來
     */
    WeaponBehavior weapon;

   abstract void fight();

    public void setWeapon(WeaponBehavior weapon) {
        this.weapon = weapon;
    }
}

4.實現(xiàn)具體的游戲角色

package strategy;

/**
 * 國王角色
 */
public class King extends Character{

    @Override
    void fight() {
        weapon.useWeapon();
    }
}

package strategy;

/**
 * 女王角色
 */
public class Queen extends Character{
    @Override
    void fight() {
        weapon.useWeapon();
    }
}

package strategy;

/**
 * 妖怪角色
 */
public class Troll extends Character {
    @Override
    void fight() {
        weapon.useWeapon();
    }
}

package strategy;

public class App {
    public static void main(String[] args) {
        Character character = new King();
        WeaponBehavior weapon = new KnifeBehavior();
        WeaponBehavior sword = new SwordBehavior();
        character.setWeapon(weapon);
        character.fight();
        character.setWeapon(sword);
        character.fight();
    }
}

運行結(jié)果如下,國王角色可以使用匕首進行刺殺,也可以換武器使用寶劍進行戰(zhàn)斗。

使用匕首刺殺
使用寶劍戰(zhàn)斗
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對象創(chuàng)建-Object Creation 1.原型 -Prototype 定義原型模式是一種簡單的設(shè)計模式,客戶端...
    陵無山閱讀 3,951評論 0 7
  • 設(shè)計模式匯總 一、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,094評論 1 15
  • “一條蛇進入了一家木工店,它爬到角落穿過鋸子,被鋸傷了一點。 它本能的轉(zhuǎn)過身咬住鋸子,又把嘴弄傷了。蛇本能的以為受...
    云之君兮霞客閱讀 450評論 5 9
  • 輕緩的音樂,如夜色一般的角落里,啟塞,調(diào)酒,倒酒,動作已重復(fù)千萬遍,將一杯“依然如故”推到正在等待的顧客隱...
    What新年簽咸魚閱讀 344評論 0 0
  • 姓名:常洪洋 (單位)大慶油田第五采油廠機關(guān)人事部(組織部) 【日精進打卡第 88 天】打卡日期:...
    翱翔九天_4a06閱讀 135評論 0 0

友情鏈接更多精彩內(nèi)容