美文网首页
《Android源码设计模式解析和实战》策略模式

《Android源码设计模式解析和实战》策略模式

作者: wslerz | 来源:发表于2017-03-06 20:33 被阅读0次

    适用于实现同一功能有多种方式;自由切换方式。
    计算方式:
    <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源码设计模式解析和实战》策略模式

          本文链接:https://www.haomeiwen.com/subject/kjgugttx.html