Android设计模式之策略模式

2017-08-01  本文已影响11人  Jsonzhang

学习资料:http://blog.lmj.wiki/2016/11/21/design-pattern/strategy/

场景描述

小光是一个码农,回老家创业卖热干面,突然有一天小光想到几个活动策略,如下:

但是这样随之而来问题是,面对不同的活动,需要不同的计算来收银,这样有点麻烦。小光想我怎样提供几个算法,到时直接来用呢。于是小光想了想,做出了如下行为:

/**
 * 策略模式
 */

public interface CeLueModle {
    // 定义抽象方法,不同的活动期间,经过不同的算法,得出应收金额
    String getActivityPrice();
}
/**
 * 感恩节活动
 */

public class ThinksGivingDay implements CeLueModle {

    @Override
    public String getActivityPrice() {
        // 不同的逻辑处理
        return "感恩节所有饮品6折";
    }
}

/**
 * 双十二活动
 */

public class DoubleTwelveDay implements CeLueModle{

    @Override
    public String getActivityPrice() {
        // 逻辑处理
        return "双十二当天满12减2元";
    }
}

/**
 * 平时没有活动
 */

public class DefalutActivity implements CeLueModle {

    @Override
    public String getActivityPrice() {
        // 逻辑处理
        return "平时没有活动";
    }
}
/**
 * 创建收银台的类
 */

public class CheckStand {

    private CeLueModle activity;

    public CheckStand(){
        activity = new DefalutActivity();
    }

    public CheckStand(CeLueModle activity){
        this.activity = activity;
    }

    public void setActivity(CeLueModle activity){
        this.activity = activity;
    }

    public void printPrice(){
        Log.e("TAG",activity.getActivityPrice());
    }
}
/**
 * 投入使用
 */
public class MainActivity extends AppCompatActivity {

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

        // 没有活动
        CheckStand checkStand = new CheckStand();
        checkStand.printPrice();

        // 感恩节
        checkStand.setActivity(new ThinksGivingDay());
        checkStand.printPrice();

        // 双十二
        checkStand.setActivity(new DoubleTwelveDay());
        checkStand.printPrice();
        
    }
}
屏幕快照 2017-08-01 上午10.36.37.png
总结:

策略模式就是在接口中定义一个或多个抽象方法,一般是一个算法方法,子类实现接口并各自封装好各自的算法,我们在用的时候通过一个统一管理类,传入不同的参数,就可以运用不同的算法,使其各不受影响。
其实我觉得策略模式,有点像java中的多态,同一个行为在面向不同的对象时,有不同的表现形式。

上一篇下一篇

猜你喜欢

热点阅读