《Android源碼設計模式解析和實戰》策略模式

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

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

* 根據公里數求得價格 地鐵一公里一元
* @param km 公里數
* @return 價格
*/
@Override
public int getPrice(int km) {
return km;
}
}
</pre>
計算工具類
<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>

優點:再次添加計算方式是只要直接實現CalculateStrategy寫出來就可以使用;不需要改其他代碼。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,556評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,255評論 4 61
  • 辛勤訓練,為集體榮譽而戰 為了迎接薩爾布拉克鎮政府組織的農牧民籃球比賽,村里的臨時成立了一個籃球隊,...
    笑對人生pxs閱讀 768評論 0 0
  • 起床時間:5:40 運動項目:橢圓儀 成果:5 km,34分鐘,362 大卡
    溫暖的小胖紙閱讀 521評論 0 50
  • 1初步篩選,縮小選擇范圍 一定一篩一比 定類型 篩選5--100億規模的基金。 業績總回報篩選,最近3個月、6個月...
    伍大大閱讀 510評論 0 0