Swift設(shè)計(jì)模式-策略模式

發(fā)現(xiàn)自己寫的不是太清楚,還是看別人,研究別人寫好的。推薦博客:
設(shè)計(jì)模式(一):“穿越火線”中的“策略模式”(Strategy Pattern)

//: Playground - noun: a place where people can play
import UIKit
/*
 “策略模式”的定義大概是:策略模式,將不同的策略(算法)進(jìn)行封裝,讓他們之間可以相互的替換,此模式讓策略的變化獨(dú)立于使用策略的用戶
 */
// 實(shí)現(xiàn)角色可以使用的不同攻擊行為,也就是不同的攻擊策略
// MARK: - 武器策略模塊
// 武器策略
protocol WeaponBehavior {
    func userWeapon()
}
class AWPBehavior: WeaponBehavior {
    func userWeapon() {
        print("大狙--biu~biu")
    }
}
class HK48Behavior: WeaponBehavior {
    func userWeapon() {
        print("HK48--tu~tu~tu")
    }
}
class PistolBehavior: WeaponBehavior {
    func userWeapon() {
        print("手槍--pa~pa~pa~")
    }
}

// MARK: - 軍人模塊
class Character {
    private var weapon: WeaponBehavior! = PistolBehavior()
    
    func setWeapon(weapon: WeaponBehavior) {
        self.weapon = weapon
    } 
    // 換手槍
    func changePistol() {
        self.setWeapon(weapon: PistolBehavior())
    }   
    func fire() {
        guard self.weapon != nil else {
            return
        }
        self.weapon.userWeapon()
    }
}
// 中尉只配備了手槍和HK48
class Lieutent: Character {
    override init() {
        super.init()
    }
    // 切換武器(策略):換HK
    func changeHK() {
        self.setWeapon(weapon: HK48Behavior())
    }
}
// 上尉只配備了手槍和大狙
class Captain: Character {
    override init() {
        super.init()
    }
    
    // 切換武器(策略):換大狙
    func changeAWP() {
        self.setWeapon(weapon: AWPBehavior())
    }
}
//中尉
let lieutenant: Lieutent = Lieutent()
lieutenant.fire()
print("\n手槍火力不行,得換HK48\n")
lieutenant.changeHK()
lieutenant.fire()

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

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

  • [Java策略模式(Strategy模式) 之體驗(yàn)] public class Client { } 測(cè)試輸出結(jié)果...
    堅(jiān)持編程_lyz閱讀 305評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,034評(píng)論 25 709
  • 365天畫365張人物手繪……如果你喜歡我的風(fēng)格,如果你想成為1/365,我愿為你拿起畫筆! 約稿請(qǐng)先看要求>>>...
    丫小丁閱讀 247評(píng)論 1 2
  • 時(shí)間是稀缺資源,很容易流失;人們對(duì)時(shí)間的感覺往往不可靠。某公司的董事長(zhǎng),非??隙ㄗ约旱臅r(shí)間安排,有1/3用于研究業(yè)...
    新袖會(huì)閱讀 662評(píng)論 0 0

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