点击上方蓝字关注码个蛋

想来躺的可以一起农药哇~~

作者博客

http://www.jianshu.com/u/197319888337

文章目录

  • 前言

  • 什么是建造者模式?

  • Builder模式的定义

  • 王者荣耀的例子

  • 撸码吧

  • 总结

  • 最后

0

前言

最近看了陈宇明老哥的英雄联盟之「策略模式」和王者荣耀之「装饰者模式」。作为日常上王者的我看完以后还是很惊(bu)喜(xie)的。什么?日常上王者不知道什么意思?

直接上图:

淡定淡定.. 其实我也不想上王者的,都是队友太给力了,所以每次我都带他们躺赢 :)

好了不催牛X了,进入本文的主题:王者荣耀之「建造者模式」

1

什么是建造者模式

Builder模式是一步一步创建一个复杂的对象的创建型模式,他允许用户在不知道内部构建细节的情况下,可以更精确的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,是的构建过程和部件的表示隔离开来。

在这里我举一个栗子,就好比王者荣耀中展示一个英雄的效果需要人物技能、回城的效果和皮肤。这里就可以使用Buidler建造者模式将他们和组装过程分离,使得构建过程和部件都可以自由扩展,两者之间耦合可以降到最低。

2

Builder模式的定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

在这里为什么用Builder模式呢
1.因为他具有良好的封装性,可以使客户端不用知道产品内部组成的细节

2.建造者独立,容易扩展

经典的Builder模式主要有四个参与者:

  1. Product:被构造的复杂对象

  2. Builder:抽象接口

  3. ConcreteBuildr:Builder接口的具体实现

  4. Director:Builder接口的构造者和使用者

目前来说在Android&Java开发过程中经典的Builder模式使用的较少,一般广泛使用的是他的一个变种,这里就不详细的讨论经典的Builder模式了一下讨论的都是变种的Builder模式。

在我们日常开发的过程中,变种Builder模式很常见。举个栗子,在android源码中最常用到的Builder模式就是AlertDialog.Builder,使用该Builder来构建复杂的AlerDialog对象。另一个栗子就是Glide,他的底层实现就用到了Glide。

还有就是我们常用的通知,由于通知中会有很多的内容,通过建造者模式可以很方便的来展示需要展示的内容。

上图则是一个通知中包含了大图标、小图标、标题和内容。通知栏的内容很丰富,如下是想要构造一些其他的内容:

3

王者荣耀的例子

首先给没有玩过王者荣耀的普及一下知识:
在这里我们来建造一个英雄,首先要设计这个英雄的3个技能

然后设置他的攻击方式,默认是近战攻击
然后建造他的皮肤,不进行建造皮肤的时候使用它的默认皮肤

有皮肤效果,皮肤需要花钱购买才可以,炫不炫还不快买

然后是回城效果。

4

撸码吧

本篇的Demo就是一个链式的建造者模式的简单实现,首先实现一个引用配置类:

在这里写一个HeroConfig 的静态内部类HeroBuilder。这样就可以实现HeroConfig.HeroBuilder的链式写法了,如下:

静态内部类HeroBuilder 如下:

最后在Activity中来构建英雄:韩信、李白、后裔、诸葛亮

最后打印的结果如下:

5

总结

好了这就是变种Builder模式,在Android开发比较常用,通常作为配置类的构建器将配置的构建和表示分离,也就是王者荣耀中的各种技能、特效等,将他们从目标类中隔离出来避免过多的setter方法。通过链式实现使得代码更简洁、易懂。缺点呢就是会产生多余的Builder对象消耗内存,不过这个缺点可以被他的优点所弥补。变种的Builder模式是根据经典的Builder模式在日常开发中的需要延伸出来的一种方式,经典Builder模式UML如下:

现在在日常的开发中Director角色经常会被忽略,这样会相对的减少了构造的步骤而直接使用一个Builder来进行对象的组装,最关键的还是Builder通常为链式调用,它的每个setter方法都返回自身,也就是代码中的return this,这样就可以实现链式调用了。

6

最后

压压惊,结果第一把保存视频以后不能导出,第二把开了英雄时刻手机没有内存没保存下来... 干脆不录了,想来躺的可以一起农药哇~~ 最后只留下了2把战绩给大家了。。

王者荣耀之「建造者模式」相关推荐

  1. 漫画|王者荣耀之「策略模式」

    召唤师技能接口 public interface 召唤师技能 { public void 技能();} 具体实现 public class 治疗术 implements 召唤师技能 {public v ...

  2. 王者荣耀之「装饰者模式」

    前言 之前写过一篇英雄联盟之「策略模式」,居然有人说没玩过,那么今天给大家带来一篇王者荣耀篇,如果还没玩过,那就去玩玩,毕竟学习是需要付出成本的! 问答环节 在王者荣耀中buff对于整场比赛起着至关重 ...

  3. 腾讯开悟「王者荣耀AI开放研究环境」启动申请,为学术研究提供探索平台

    感谢阅读腾讯AI Lab微信号第 155 篇文章.本文介绍腾讯「开悟」平台「王者荣耀AI开放研究环境」正式启动申请. 11 月 21 日,腾讯「开悟」平台宣布开放「王者荣耀 AI 开放研究环境」申请, ...

  4. LOL设计模式之「策略模式」

    之前写过一篇什么是「设计模式」?,没有类图,没有代码,有些同学说看不太懂,今天给大家带来策略模式(有图,有码,有真相!). 英雄联盟(LOL) 玩过LOL的同学都知道,LOL有上百个英雄,如果用OO技 ...

  5. 从零开始单排学设计模式「代理模式」青铜 III

    阅读本文大概需要 3.2 分钟. 本篇是设计模式系列的第六篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了 ...

  6. 特斯拉避免宠物于车内热衰竭 车辆添加「狗狗模式」

    特斯拉执行长马斯克(Elon Musk)常喜欢在社群与网友互动,甚至从网友建议中汲取灵感得到新点子.近日在一位宠爱毛小孩的车主建议下,马斯克也承诺考虑为车辆加入「狗狗模式」(dog mode),让宠物 ...

  7. LOL设计模式之「策略模式」 1

    之前写过一篇什么是「设计模式」?,没有类图,没有代码,有些同学说看不太懂,今天给大家带来策略模式(有图,有码,有真相!). 英雄联盟(LOL) 玩过LOL的同学都知道,LOL有上百个英雄,如果用OO技 ...

  8. unity主角移动到屏幕最左侧时向上移动_王者荣耀:新增右手模式,连线功能升级,守卫峡谷增加天赋系统 – 手机游戏网—推荐最精彩的手机游戏...

    随着王者峡谷年度盛宴-周年庆的开启,永久英雄皮肤.回城.击败特效.个性动作和各种五周年限时语音开放获取,在最新开启的参与放灯祈愿活动中,所有玩家除了可以获知自己降临峡谷的时间,还能获得"祝你 ...

  9. 王者荣耀java实现_从王者荣耀看设计模式-策略模式(java版)

    王者荣耀 曾经我也是一名玩农药的大学生,但现在已经弃了,别问我为什么(被坑爹队友坑的哭...).而今天我们来把让农药变荣耀,我们来从王者荣耀中看设计模式的策略模式. 射手 00.分析 我们先来思考,王 ...

最新文章

  1. 开源矿工README
  2. 云原生体系下 Serverless 弹性探索与实践
  3. sp_updatestats和update statistics的区别
  4. PCB-电解电容的封装
  5. Chrome 扩展 最近的历史 HistoryBar v1.1
  6. java 设计模式原则_Java设计模式的七大原则
  7. 网络计算机的分类包括哪些,计算机的分类有哪些
  8. hive 语句总结_HiveQL查询语句总结
  9. UI展示样机素材|让作品看起来毫无痕迹,还原场景!
  10. 我换了一个灯泡,看看互联网大厂员工们的简历上都会怎么写
  11. showModalDialog模态对话框的使用以及浏览器兼容
  12. DockerDesktop安装以后,控制台输入docker version报错This error may indicate that the docker daemon is not running
  13. ubuntu18常用软件安装设置
  14. 【OFDM通信】基于matlab OFDM通信系统仿真【含Matlab源码 1005期】
  15. js进行txt文件下载方式或oss文件访问下载跨域解决
  16. python编写移动平均_如何在Python中编写不同类型的移动平均线。
  17. 如何给 ReactJS 应用增加配置文件?
  18. 《计算机达人成长之路——憧憬与迷茫篇》有钱的捧个预订场,有人的捧个评价场...
  19. MIDI应用: 播放midi音乐文件的方法 [Win32版本+ C语言版本]
  20. 蛮力法-分治法-处理最近对问题

热门文章

  1. 选择性粘贴HTML,选择性粘贴可以选择以方式来粘贴。
  2. linux grep 查询多个字符 或 忽略大小写
  3. [UE4]几个好用的插件
  4. html 写一个注册和登录页面
  5. 前端面试总结 :http、html和浏览器篇
  6. 六一礼物之贪吃蛇小游戏送给大家
  7. vue cli3项目上限qq浏览器等出现空白兼容性错误解决方案
  8. Unity 2020.3.21f1c1 install and WebGL module download
  9. 磷矿系列:全国磷矿储量排行榜
  10. 计算机的组成(程序如何实现)