《Android源碼設(shè)計(jì)模式解析和實(shí)戰(zhàn)》策略模式

適用于實(shí)現(xiàn)同一功能有多種方式;自由切換方式。
計(jì)算方式:
<pre>
public interface CalculateStrategy {
/*
* 根據(jù)公里數(shù)求的價(jià)格
*
* @param km 公里數(shù)
* @return 價(jià)格
/
int getPrice(int km);
}
public class Bus implements CalculateStrategy {
/

* 根據(jù)公里數(shù) 求得價(jià)格 公交一公里兩元
* @param km 公里數(shù)
* @return 價(jià)格
/
@Override
public int getPrice(int km) {
return 2 * km;//2xkm 星號(hào)顯示不出來
}
}
public class Subway implements CalculateStrategy {
/

* 根據(jù)公里數(shù)求得價(jià)格 地鐵一公里一元
* @param km 公里數(shù)
* @return 價(jià)格
*/
@Override
public int getPrice(int km) {
return km;
}
}
</pre>
計(jì)算工具類
<pre>
public class CalculateUtils {
private static CalculateStrategy calculateStrategy;
private static final String TAG = "CalculateUtils";

public static int getPrice(int km) {
    int price = 0;
    if (calculateStrategy != null) {
        price = calculateStrategy.getPrice(km);
    }
    Log.i(TAG, km + "km price=" + price);
    return price;
}

public static void setCalculateStrategy(CalculateStrategy calculateStrategy) {
    CalculateUtils.calculateStrategy = calculateStrategy;
}

}
</pre>
使用
<pre>

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    int km = 10;
    CalculateUtils.getPrice(km);
    CalculateUtils.setCalculateStrategy(new Bus());
    CalculateUtils.getPrice(km);
    CalculateUtils.setCalculateStrategy(new Subway());
    CalculateUtils.getPrice(km);
}

}
</pre>
log
<pre>
03-06 20:24:24.036 7005-7005/com.lerz.strategy I/CalculateUtils: 10km price=0
03-06 20:24:24.036 7005-7005/com.lerz.strategy I/CalculateUtils: 10km price=20
03-06 20:24:24.036 7005-7005/com.lerz.strategy I/CalculateUtils: 10km price=10
</pre>

優(yōu)點(diǎn):再次添加計(jì)算方式是只要直接實(shí)現(xiàn)CalculateStrategy寫出來就可以使用;不需要改其他代碼。

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,082評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,397評(píng)論 4 61
  • 辛勤訓(xùn)練,為集體榮譽(yù)而戰(zhàn) 為了迎接薩爾布拉克鎮(zhèn)政府組織的農(nóng)牧民籃球比賽,村里的臨時(shí)成立了一個(gè)籃球隊(duì),...
    笑對人生pxs閱讀 814評(píng)論 0 0
  • 起床時(shí)間:5:40 運(yùn)動(dòng)項(xiàng)目:橢圓儀 成果:5 km,34分鐘,362 大卡
    溫暖的小胖紙閱讀 542評(píng)論 0 50
  • 1初步篩選,縮小選擇范圍 一定一篩一比 定類型 篩選5--100億規(guī)模的基金。 業(yè)績總回報(bào)篩選,最近3個(gè)月、6個(gè)月...
    伍大大閱讀 567評(píng)論 0 0

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