emmm.. 什么叫策略模式呢? 我接下會來通過吃雞的武器來給大家講解竿裂,以便于大家理解什么是策略模式
策略模式的定義
策略模式是一種面向接口編程,讓每一個接口互相沒有關(guān)聯(lián)麻削,卻可以互相替換致讥。也可以相當(dāng)于說一種行為與算法
UML類圖
- Arsenat 上下文類憎瘸,用來實(shí)現(xiàn)與替換策略(相當(dāng)于Android中常用的BaseActivity)
- Weapon 策略的抽象類
- WeaponM16A4,WeaponM416 抽象的具體事例類
具體代碼實(shí)現(xiàn)
在我們吃雞的時候,我們跳傘之后會拾取到很多武器,這些武器有一個共同的特點(diǎn)就是 都能開槍射擊(shoot),但是我們角色(Arsenat)有時候一局游戲中可能會更換(setWeapon)很多種武器, 但是開槍一個特征所有武器都是持有的. 從策略模式的角度來分析的話富岳,我們更換武器 只需更換武器的引用蛔糯,這就是上面所說面向接口編程 會降低耦合 方便之后擴(kuò)展
策略抽象Weapon
public interface Weapon {
/**
* 射擊
*/
void shoot();
}
策略實(shí)例WeaponXXX
public class WeaponAKM implements Weapon {
@Override
public void shoot() {
System.out.println("AKM 擊殺了 xxx");
}
}
public class WeaponM16A4 implements Weapon {
@Override
public void shoot() {
System.out.println("M16A4 擊殺了 xxx");
}
}
Arsenat
public class Arsenat {
private Weapon mWeapon;
public Arsenat(Weapon mWeapon) {
this.mWeapon = mWeapon;
}
public void setWeapon(Weapon weapon) {
mWeapon = weapon;
}
public void action() {
mWeapon.shoot();
}
}
運(yùn)行
public static void main(String[] args) {
Arsenat arsenat = new Arsenat(new WeaponAKM());
//擊殺
arsenat.action();
//舔包 換武器
arsenat.setWeapon(new WeaponM16A4());
arsenat.action();
}
//Log
AKM 擊殺了 xxx
M16A4 擊殺了 xxx
總結(jié)
通過簡單的代碼實(shí)例,我們基本能夠理解什么是策略模式,代碼雖然非常簡單,但是設(shè)計(jì)模式是一種思想,我們要學(xué)會如果運(yùn)用這種思想到平常的編碼提高我們的設(shè)計(jì)和架構(gòu)能力窖式。
策略模式
優(yōu)點(diǎn): 對于較為復(fù)雜的業(yè)務(wù)邏輯顯得更為直觀蚁飒,擴(kuò)展也更為方便
缺點(diǎn): 如果策略過多,子類相對就回比較臃腫,如果需要大量子類,謹(jǐn)慎使用