计算一下战斗损失,还是诸葛亮老谋深算,乍一看 关羽、赵云 比较牛皮,这赵云差点就锤不过了,别看 马超****老黄盖 出马,所谓老将出马,一个顶俩。
好了,这个例子就是这样的,也是我自己瞎想着玩的,感觉非常有意思,就用代码实现了一下。至此,我们还没有用上策略模式,虽然诸葛亮料事如神,
策略模式的运用
接下来,才是我们的策略模式具体使用情况,关于策略模式的定义,它是说把这一系列算法一个一个的封装起来,并且使其能够相互替换。这样的话,我们上面代码中的算法部分,就只有五虎上将和敌军的战力比较情况了,比如这一部分:
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进行处理,非常感谢!