设计模式 策略模式 以角色游戏为背景

protected abstract void attack();

protected abstract void defend();

}

package com.zhy.bean;

public class RoleA extends Role

{

public RoleA(String name)

{

this.name = name;

}

@Override

protected void display()

{

System.out.println(“样子1”);

}

@Override

protected void run()

{

System.out.println(“金蝉脱壳”);

}

@Override

protected void attack()

{

System.out.println(“降龙十八掌”);

}

@Override

protected void defend()

{

System.out.println(“铁头功”);

}

}

没几分钟,你写好了上面的代码,觉得已经充分发挥了OO的思想,正在窃喜,这时候项目经理说,再添加两个角色

RoleB(样子2 ,降龙十八掌,铁布衫,金蝉脱壳)。

RoleC(样子1,拥有九阳神功,铁布衫,烟雾弹)。

于是你觉得没问题,开始写代码,继续集成Role,写成下面的代码:

package com.zhy.bean;

public class RoleB extends Role

{

public RoleB(String name)

{

this.name = name;

}

@Override

protected void display()

{

System.out.println(“样子2”);

}

@Override

protected void run()

{

System.out.println(“金蝉脱壳”);//从RoleA中拷贝

}

@Override

protected void attack()

{

System.out.println(“降龙十八掌”);//从RoleA中拷贝

}

@Override

protected void defend()

{

System.out.println(“铁布衫”);

}

}

package com.zhy.bean;

public class RoleC extends Role

{

public RoleC(String name)

{

this.name = name;

}

@Override

protected void display()

{

System.out.println(“样子1”);//从RoleA中拷贝

}

@Override

protected void run()

{

System.out.println(“烟雾弹”);

}

@Override

protected void attack()

{

System.out.println(“九阳神功”);

}

@Override

protected void defend()

{

System.out.println(“铁布衫”);//从B中拷贝

}

}

写完之后,你自己似乎没有当初那么自信了,你发现代码中已经存在相当多重复的代码,需要考虑重新设计架构了。于是你想,要不把每个技能都写成接口,有什么技能的角色实现什么接口,简单一想,觉得这想法高大尚啊,但是实现起来会发现,接口并不能实现代码的复用,每个实现接口的类,还是必须写自己写实现。于是,we need change ! 遵循设计的原则,找出应用中可能需要变化的部分,把它们独立出来,不要和那些不需要变化的代码混在一起。我们发现,对于每个角色的display,attack,defend,run都是有可能变化的,于是我们必须把这写独立出来。再根据另一个设计原则:针对接口(超类型)编程,而不是针对实现编程,于是我们把代码改造成这样:

package com.zhy.bean;

public interface IAttackBehavior

{

void attack();

}

package com.zhy.bean;

public interface IDefendBehavior

{

void defend();

}

package com.zhy.bean;

public interface IDisplayBehavior

{

void display();

}

package com.zhy.bean;

public class AttackJY implements IAttackBehavior

{

@Override

public void attack()

{

System.out.println(“九阳神功!”);

}

}

package com.zhy.bean;

public class DefendTBS implements IDefendBehavior

{

@Override

public void defend()

{

System.out.println(“铁布衫”);

}

}

package com.zhy.bean;

public class RunJCTQ implements IRunBehavior

{

@Override

public void run()

{

System.out.println(“金蝉脱壳”);

}

}

这时候需要对Role的代码做出改变:

package com.zhy.bean;

/**

  • 游戏的角色超类

  • @author zhy

*/

public abstract class Role

{

protected String name;

protected IDefendBehavior defendBehavior;

protected IDisplayBehavior displayBehavior;

protected IRunBehavior runBehavior;

protected IAttackBehavior attackBehavior;

public Role setDefendBehavior(IDefendBehavior defendBehavior)

{

this.defendBehavior = defendBehavior;

return this;

}

public Role setDisplayBehavior(IDisplayBehavior displayBehavior)

{

this.displayBehavior = displayBehavior;

return this;

}

public Role setRunBehavior(IRunBehavior runBehavior)

{

this.runBehavior = runBehavior;

return this;

}

public Role setAttackBehavior(IAttackBehavior attackBehavior)

{

this.attackBehavior = attackBehavior;

return this;

}

protected void display()

Android核心知识点

面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验。

下面这份PDF是我翻阅了差不多3个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点,全部都是精华中的精华,我能面试到现在2-2资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

不管是Android基础还是Java基础以及常见的数据结构,这些是无原则地必须要熟练掌握的,尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。

节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
Android的核心知识点*,全部都是精华中的精华,我能面试到现在2-2资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

[外链图片转存中…(img-JExbjoS2-1715393595400)]

不管是Android基础还是Java基础以及常见的数据结构,这些是无原则地必须要熟练掌握的,尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。

节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值