Android 策略模式學(xué)習(xí)

策略模式

這個(gè)模式定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使他們還可以相互替換.
策略模式讓算法獨(dú)立于使用他的客戶而獨(dú)立變化的

使用場(chǎng)景

1 針對(duì)一類型問題有多種處理方式,僅僅是具體行為有差別

2 需要 安全的封裝多種同一類的操作

3 出現(xiàn)同一抽象類有多個(gè)子類 而有需要使用 if-else 或者 switch-case 來選擇具體的子類的時(shí)候

自己的理解

其實(shí)就是模塊化的步槍 可以通過換槍管 發(fā)射不同的子彈

代碼中 SubwayStrategy 就是槍管

TranficCalculator 就是槍

代碼:

/**
 * 價(jià)格計(jì)算器
 */
public class TranficCalculator {
    private CalculateStrategy mStrategy;
    public TranficCalculator(CalculateStrategy strategy) {
        mStrategy = strategy;
    }

    public int getPrice(int km) {
        return mStrategy.calculatePrice(km);
    }
}
/**
 * 計(jì)算接口
 */
public interface CalculateStrategy {
    int calculatePrice(int km);
}
/**
 * 公交車
 */
public class BusStrategy implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        int extraTotal = km - 10;
        int extraFactor = extraTotal / 5;
        int fraction = extraTotal % 5;
        int price = 1 + extraFactor * 1;
        price = fraction > 0 ? ++price : price;
        return price;
    }
}
/**
 * 地鐵
 */
public class SubwayStrategy implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        if (km < 6) {
            return 3;
        }
        if (km < 12) {
            return 4;
        }
        if (km < 22) {
            return 5;
        }
        if (km < 32) {
            return 6;
        }
        return 7;
    }
}

使用:

public class MainActivity extends AppCompatActivity {

    private EditText mMainEt;
    private TranficCalculator calculator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        calculator = new TranficCalculator(new SubwayStrategy());


        mMainEt = findViewById(R.id.main_et);
        findViewById(R.id.main_bt).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String trim = mMainEt.getText().toString().trim();
                int i = Integer.parseInt(trim);
                int price = calculator.getPrice(i);
                Log.e("text123", "onCreate: price = " + price);
            }
        });
        
    }
}

具體代碼地址:

https://github.com/zhoudakkk/design_pattern_day05.git

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末末捣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矫钓,更是在濱河造成了極大的恐慌蕾久,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歌豺,死亡現(xiàn)場(chǎng)離奇詭異推穷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)类咧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門馒铃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟹腾,“玉大人,你說我怎么就攤上這事区宇⊥拗常” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵议谷,是天一觀的道長(zhǎng)炉爆。 經(jīng)常有香客問我,道長(zhǎng)卧晓,這世上最難降的妖魔是什么芬首? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮逼裆,結(jié)果婚禮上郁稍,老公的妹妹穿的比我還像新娘。我一直安慰自己胜宇,他們只是感情好艺晴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掸屡,像睡著了一般封寞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仅财,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天狈究,我揣著相機(jī)與錄音,去河邊找鬼盏求。 笑死抖锥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碎罚。 我是一名探鬼主播磅废,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荆烈!你這毒婦竟也來了拯勉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤憔购,失蹤者是張志新(化名)和其女友劉穎宫峦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玫鸟,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡导绷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屎飘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妥曲。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贾费,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出檐盟,到底是詐尸還是另有隱情褂萧,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布遵堵,位于F島的核電站箱玷,受9級(jí)特大地震影響怨规,放射性物質(zhì)發(fā)生泄漏陌宿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一波丰、第九天 我趴在偏房一處隱蔽的房頂上張望壳坪。 院中可真熱鬧,春花似錦掰烟、人聲如沸爽蝴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝎亚。三九已至,卻和暖如春先馆,著一層夾襖步出監(jiān)牢的瞬間发框,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工煤墙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梅惯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓仿野,卻偏偏與公主長(zhǎng)得像铣减,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脚作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品葫哗,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式球涛。簡(jiǎn)單...
    舟漁行舟閱讀 7,777評(píng)論 2 17
  • javascript設(shè)計(jì)模式與開發(fā)實(shí)踐 設(shè)計(jì)模式 每個(gè)設(shè)計(jì)模式我們需要從三點(diǎn)問題入手: 定義 作用 用法與實(shí)現(xiàn) 單...
    穿牛仔褲的蚊子閱讀 4,066評(píng)論 0 13
  • 【學(xué)習(xí)難度:★☆☆☆☆魄梯,使用頻率:★★★★☆】直接出處:策略模式梳理和學(xué)習(xí):https://github.com/...
    BruceOuyang閱讀 1,468評(píng)論 3 5
  • 工廠模式 單體模式 模塊模式 代理模式 職責(zé)鏈模式 命令模式 模板方法模式 策略模式 發(fā)布-訂閱模式 中介者模式 ...
    HelloJames閱讀 1,012評(píng)論 0 6
  • 二十三種設(shè)計(jì)模式 - 策略模式 策略模式簡(jiǎn)介 模式動(dòng)機(jī) 完成一項(xiàng)任務(wù),往往可以有多種不同的方式宾符,每一種方式稱為一個(gè)...
    JustTheSame閱讀 1,834評(píng)論 2 16