美文网首页
Android 策略模式学习

Android 策略模式学习

作者: _周小二 | 来源:发表于2019-06-18 15:18 被阅读0次

策略模式

这个模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换.
策略模式让算法独立于使用他的客户而独立变化的

使用场景

1 针对一类型问题有多种处理方式,仅仅是具体行为有差别

2 需要 安全的封装多种同一类的操作

3 出现同一抽象类有多个子类 而有需要使用 if-else 或者 switch-case 来选择具体的子类的时候

自己的理解

其实就是模块化的步枪 可以通过换枪管 发射不同的子弹

代码中 SubwayStrategy 就是枪管

TranficCalculator 就是枪

代码:

/**
 * 价格计算器
 */
public class TranficCalculator {
    private CalculateStrategy mStrategy;
    public TranficCalculator(CalculateStrategy strategy) {
        mStrategy = strategy;
    }

    public int getPrice(int km) {
        return mStrategy.calculatePrice(km);
    }
}
/**
 * 计算接口
 */
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

相关文章

  • java/android 设计模式学习笔记(17)---策略模式

    java/android 设计模式学习笔记(17)---策略模式 【备注】只用于个人收藏

  • 11.7设计模式-策略模式-详解

    设计模式-策略模式 策略模式详解 策略模式在android中的实际运用 1.策略模式详解 2.策略模式在andro...

  • Android 策略模式学习

    策略模式 这个模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换.策略模式让算法独立于使用他...

  • 设计模式整理(7) 状态模式

    学习《Android 源码设计模式解析与实践》系列笔记 介绍 状态模式和策略模式都是行为型模式。状态模式中的行为是...

  • 第十三章学习策略的教学

    (一)通用学习策略的教学模式 (二)学科学习策略教学模式 (三)交又式学习策略教学模式 三、学习策略的训练 策略的...

  • Android 架构师之路15 设计模式之策略模式

    Android 架构师之路 目录 1、策略模式概念 1.1 介绍 在策略模式(Strategy Pattern)中...

  • 十三章 学习策略的教学

    学习策略的教学模式 (一)通用学习策略教学模式 (二)学科学习策略教学模式 专门传授语文或数学学科的学习方法与技...

  • 设计模式-策略模式

    什么是策略模式?什么时候用? 提到策略模式,一般常见于算法,例如排序算法,多种策略提供排序。 Android中的动...

  • Android 策略模式

    源码地址 介绍 策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使...

  • Java设计模式之行为型模式

    策略模式【strategy】(接口主要) 【学习难度:★☆☆☆☆,使用频率:★★★★☆】 定义:策略模式定义了一系...

网友评论

      本文标题:Android 策略模式学习

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