策略模式 — 孔明排兵布阵,掌握了这些Android高级工程师必备知识,

计算一下战斗损失,还是诸葛亮老谋深算,乍一看 关羽、赵云 比较牛皮,这赵云差点就锤不过了,别看 马超****老黄盖 出马,所谓老将出马,一个顶俩。

好了,这个例子就是这样的,也是我自己瞎想着玩的,感觉非常有意思,就用代码实现了一下。至此,我们还没有用上策略模式,虽然诸葛亮料事如神,

策略模式的运用

接下来,才是我们的策略模式具体使用情况,关于策略模式的定义,它是说把这一系列算法一个一个的封装起来,并且使其能够相互替换。这样的话,我们上面代码中的算法部分,就只有五虎上将和敌军的战力比较情况了,比如这一部分:

1    // 赵云的军队

2    private String zhaoyunArmy() {

3        int army = 8500;

4        float fighting = 2.55f;

5

6        // 敌人实力

7        int enemyStrength = (int) (enemy * enemyfighting);

8        // 我军实力

9        int zhangfeiStrength = (int) (army * fighting);

10        // 战斗结果

11        int soldier = zhangfeiStrength – enemyStrength;

12

13        return soldier > 0 nbsp;“战胜!剩余士兵:” + soldier : “战败!”;

14    }

根据策略模式的使用规则,要把算法封装为一个类,也就是把上部分代码封装到类里面去。有了这样的思想,我们事情就好办了,为五虎上将建立五个类,把算法搬到里面去,这是第一步要做的。

策略模式还指出需要根据算法替换不同的类,也就是诸葛亮可以派遣五虎上将中的任何一位都可以,所以这里需要一个接口,根据多态性,我们可以传入它的不同实现类。下面开始着手改为策略模式吧!

首先,新建一个接口,传入敌军的人数和战力值,返回的是战斗结果,如下:

1package com.xww.dp.strategy;

2

3/**

4 * 诸葛亮策略接口

5 *

6 * @author xww

7 * @博客 https://blog.csdn.net/smile_running=1

8 */

9public interface ZhugeliangStrategy {

10

11    // 派遣五虎上将

12    String wuhu(int enemy, float enemyFlighting);

13}

接下来是对每一个五虎上将的算法封装,代码如下:

1package com.xww.dp.strategy;

2

3/**

4 * 五虎上将 – 张飞

5 *

6 * @author xww

7 *

8 */

9public class ZhangFei implements ZhugeliangStrategy {

10

11    public ZhangFei() {

12

13    }

14

15    @Override

16    public String wuhu(int enemy, float enemyFlighting) {

17        int army = 9500;

18        float fighting = 2.35f;

19

20        // 敌人实力

21        int enemyStrength = (int) (enemy * enemyFlighting);

22        // 我军实力

23        int zhangfei

上面运行结果是每一位的战绩情况,根据没一位将军的拥兵数量和战斗力计算出来的。它们的剩余士兵就是战绩,接下来我们来计算一下他们的战斗损失情况。

战斗损失:

  • 张飞 :拥兵 9500,剩余 725,损失 8775 人

  • 关羽 :拥兵 9000,剩余 450,损失 8550 人

  • 赵云 :拥兵 8500,剩余 75,损失 8425 人

  • 马超 :拥兵 10000,剩余 1400,损失 8600 人

  • 黄忠:拥兵 11000,剩余 2600,损失 8400 人

计算一下战斗损失,还是诸葛亮老谋深算,乍一看 关羽、赵云 比较牛皮,这赵云差点就锤不过了,别看 马超****老黄盖 出马,所谓老将出马,一个顶俩。

好了,这个例子就是这样的,也是我自己瞎想着玩的,感觉非常有意思,就用代码实现了一下。至此,我们还没有用上策略模式,虽然诸葛亮料事如神,

策略模式的运用

接下来,才是我们的策略模式具体使用情况,关于策略模式的定义,它是说把这一系列算法一个一个的封装起来,并且使其能够相互替换。这样的话,我们上面代码中的算法部分,就只有五虎上将和敌军的战力比较情况了,比如这一部分:

1    // 赵云的军队

2    private String zhaoyunArmy() {

3        int army = 8500;

4        float fighting = 2.55f;

5

6        // 敌人实力

7        int enemyStrength = (int) (enemy * enemyfighting);

8        // 我军实力

9        int zhangfeiStrength = (int) (army * fighting);

10        // 战斗结果

11        int soldier = zhangfeiStrength – enemyStrength;

12

13        return soldier > 0 nbsp;“战胜!剩余士兵:” + soldier : “战败!”;

14    }

根据策略模式的使用规则,要把算法封装为一个类,也就是把上部分代码封装到类里面去。有了这样的思想,我们事情就好办了,为五虎上将建立五个类,把算法搬到里面去,这是第一步要做的。

策略模式还指出需要根据算法替换不同的类,也就是诸葛亮可以派遣五虎上将中的任何一位都可以,所以这里需要一个接口,根据多态性,我们可以传入它的不同实现类。下面开始着手改为策略模式吧!

首先,新建一个接口,传入敌军的人数和战力值,返回的是战斗结果,如下:

1package com.xww.dp.strategy;

2

3/**

4 * 诸葛亮策略接口

5 *

6 * @author xww

7 * @博客 https://blog.csdn.net/smile_running=1

8 */

9public interface ZhugeliangStrategy {

10

11    // 派遣五虎上将

12    String wuhu(int enemy, float enemyFlighting);

13}

接下来是对每一个五虎上将的算法封装,代码如下:

1package com.xww.dp.strategy;

2

3/**

4 * 五虎上将 – 张飞

5 *

6 * @author xww

7 *

8 */

9public class ZhangFei implements ZhugeliangStrategy {

10

11    public ZhangFei() {

12

13    }

14

15    @Override

16    public String wuhu(int enemy, float enemyFlighting) {

17        int army = 9500;

18        float fighting = 2.35f;

19

20        // 敌人实力

21        int enemyStrength = (int) (enemy * enemyFlighting);

22        // 我军实力

23        int zhangfeiStrength = (int) (army * fighting);

24        // 战斗结果

25        int soldier = zhangfeiStrength – enemyStrength;

26

27        return soldier > 0 nbsp;“战胜!剩余士兵:” + soldier : “战败!”;

28    }

29}

要实现刚刚创建的策略接口,把算法部分考过来就行了,剩余四个都是这样的操作,看看就懂了。关羽类的代码:

1package com.xww.dp.strategy;

2

3public class GuanYu implements ZhugeliangStrategy {

4

5    public GuanYu() {

6

7    }

8

9    @Override

10    public String wuhu(int enemy, float enemyFlighting) {

11        int army = 8500;

12        float fighting = 2.55f;

13

14        // 敌人实力

15        int enemyStrength = (int) (enemy * enemyFlighting);

16        // 我军实力
11    public ZhangFei() {

12

13    }

14

15    @Override

16    public String wuhu(int enemy, float enemyFlighting) {

17        int army = 9500;

18        float fighting = 2.35f;

19

20        // 敌人实力

21        int enemyStrength = (int) (enemy * enemyFlighting);

22        // 我军实力

23        int zhangfeiStrength = (int) (army * fighting);

24        // 战斗结果

25        int soldier = zhangfeiStrength – enemyStrength;

26

27        return soldier > 0 nbsp;“战胜!剩余士兵:” + soldier : “战败!”;

28    }

29}

要实现刚刚创建的策略接口,把算法部分考过来就行了,剩余四个都是这样的操作,看看就懂了。关羽类的代码:

1package com.xww.dp.strategy;

2

3public class GuanYu implements ZhugeliangStrategy {

4

5    public GuanYu() {

6

7    }

8

9    @Override

10    public String wuhu(int enemy, float enemyFlighting) {

11        int army = 8500;

12        float fighting = 2.55f;

13

14        // 敌人实力

15        int enemyStrength = (int) (enemy * enemyFlighting);

16        // 我军实力

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月25日
下一篇 2022年1月25日

相关推荐