米线店结账程序 装饰着模式_王者荣耀角度下分析面向对象程序设计B中23种设计模式之装饰模式...

论坛 期权论坛     
选择匿名的用户   2021-5-22 22:27   90   0
<div>
<p></p>
<div style="text-align:center;">
  <img alt="8a4d03e7d8c47239beb3be1533dc338b.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-68f538d2323b0de11f05dd012c060aa3.png">
</div>
<p><b>装饰模式在王者荣耀中的应用</b></p>
<p></p>
<div style="text-align:center;">
  <img alt="cc9f9867ed25c93843a5d78ea19bec0c.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-f7ea18e2b89479a55b60c233c69d759a.png">
</div>

架构师girl:终于有人总结全了Java虚拟机—JVM调优&#43;算法&#43;面试真题,共2.39Gzhuanlan.zhihu.com
<div style="text-align:center;">
  <img alt="136e2bfd18468c09596fc4cb73480361.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-e3fe4a8ff0195b6f336214c803b08637.png">
</div>

架构师girl:终于有人整理出SSM&#43;微服务&#43;Nginx&#43;Redis&#43;MySQL的PDF了(java岗)zhuanlan.zhihu.com
<div style="text-align:center;">
  <img alt="4984899793e7fac0428559ada419b162.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-eb200bb8f282e6ffeec44e587a5cf295.png">
</div>
<h2>一、简述</h2>
<p>在王者荣耀这款游戏中,英雄在战场上高伤害、高爆发、高移速等是所有玩家共同追求的,那么这些所谓的伤害、移速、穿透力等英雄属性我们可以通过在局外对英雄附带皮肤、配置合适的铭文;以及在局内通过购买装备等多种形式为我们的英雄增加伤害、移速。</p>
<p>像这种动态地对英雄额外增加皮肤、铭文、装备的方式提高伤害就可以通过“装饰模式”来实现。</p>
<p>玩过王者荣耀的人都知道,司马懿这个英雄作战能力是很强的,为了更出色地实现这个英雄在对局中的效果,在本例中,我们要对英雄司马懿从皮肤、铭文、装备三个层面提高他的作战和续航能力。</p>
<blockquote>
  因为是三个层面,我们就在具体装饰角色中创建三个类去实现它:
  <br>①皮肤层面:皮肤可以给英雄带来10点的攻击加成;
  <br>②铭文层面:5级铭文梦魇、心眼、狩猎各10个(150级)是针对司马懿这一刺客类法师所推荐的;
  <br>③装备层面:攻速鞋&#43;虚无法杖&#43;吸血书&#43;帽子&#43;法穿杖&#43;名刀/辉月的出装可以有效提高其在局内作战的效果
</blockquote>
<p>同时在本例中,我们简单地从攻速、移速、法伤、物伤四个角度看待这些方面的提升。</p>
<h2>二、装饰模式(Decorator Pattern)</h2>
<p><b>装饰模式理解:</b></p>
<p>动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。</p>
<p>装饰模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。</p>
<p>装饰模式是动态地扩展一个对象的功能,而不需要改变原始类代码的一种成熟模式。在装饰模式中,“具体组件”类和“具体装饰”类是该模式中的最重要的两个角色。</p>
<p><b>装饰模式结构中的四种角色:</b></p>
<p>抽象组件(Component) :是一个抽象类,定义了“被装饰者”需要进行“装饰的方法”</p>
<p>具体组件(ConcreteComponent) :是抽象组件的一个子类,其实例被称为“被装饰者”</p>
<p>装饰(Decorator):也是抽象组件的一个子类(可抽象,可非抽象)</p>
<p>具体装饰(ConcreteDecotator):是装饰的一个非抽象子类,其实例被称为“装饰者”</p>
<p>装饰模式的UML类图:</p>
<p></p>
<div style="text-align:center;">
  <img alt="e35b0e3e2998843c8994c23309b17a2f.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-2a2e4444eeb0b9d476ec9101923857a6.png">
</div>
<p><b>装饰模式的优缺点:</b></p>
<p><b>优点:</b></p>
<p>①被装饰者和装饰者是松耦合关系</p>
<p>②装饰模式满足“开-闭原则”</p>
<p>③可以使用多个具体装饰来装饰具体组件的实例</p>
<p><b>缺点:</b></p>
<p>多层的装饰比较复杂</p>
<h2>三、王者荣耀角度下实现装饰模式结构图及代码</h2>
<p><b>实现此装饰模式的UML类图</b></p>
<p></p>
<div style="text-align:center;">
  <img alt="f965e82d7c32e6376cea724ec450246f.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-70578e34c4bbf56606ee1e439f53d151.png">
</div>
<p><b>eclipse结构图</b></p>
<p></p>
<div style="text-align:center;">
  <img alt="25f82a7970f02324921aa1a9f9b265dc.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-31cf54d18bb290169235c50ac4156377.png">
</div>
<p><b>主函数【应用(Application)】</b></p>
<p><b>Application.java</b></p>
<div class="blockcode">
  <pre class="blockcode"><code>package angle_decorator;

/*

         应用类

*/

import angle_decorator.Application;

import angle_decorator.Hero;

import angle_decorator.SimaYi;

import a
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP