命令模式 - 海上餐厅巴拉蒂
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 海上餐厅在海贼世界中,巴拉蒂是位于东海桑巴斯海域的一个海上餐厅。外形是条巨型的船,船两头有鱼形状的船首,整艘船能转换成战斗状态。巴拉蒂是东海最有名的餐厅,有不少人特地为了品尝老板兼主厨哲普所做的美味料理而来到这里,甚至连海军的重要角色都会来这里吃饭。
当出身东海的路飞路过巴拉蒂餐厅的时候,由于损坏了餐厅的财物,被强行扣留下来打工以此偿还他造成的损失,替自己赎身。这天来了几个人吃饭,路飞作为服务员接待他们点餐。意料之中,他又把事儿搞砸了,下面作为程序猿的我打算替路飞写一个点餐的小程序,先来分析需求:
允许顾客点多个菜,点餐完毕后,厨师才开始制作
点餐过程中需要及时提醒顾客,这个菜现在是不是可以制作(可能原材料用完了)
需要有点餐记录,结账的时候用
顾客可以取消已下单但是还没有制作的菜
如果想要实现上述的需求,需要在程序中准备如下几个对象:
替顾客下单的服务员路飞
给顾客炒菜的厨师哲普
由路飞写好的顾客点餐列表
我们可以将顾客的点餐列表看作是一个 ...
责任链模式 - 巴洛克工作社
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 犯罪公司在海贼世界中,巴洛克工作社是驻扎于阿拉巴斯坦的秘密犯罪公司,社长是王下七武海之一的沙·克洛克达尔。巴洛克工作社的名义上的目的是推翻阿拉巴斯坦建立理想王国,真正目的是得到古代兵器“冥王”从而获得更强大的力量。先来看一下这个公司的组织结构:
虽然巴洛克工作社是个犯罪公司,但是其内部的组织结构和分工是非常明确的。假设大聪明是这个组织中最卑微的百万长者,那么有任何需求都需要向上级汇报等待审批,比如请假、涨工资、离职等,对于不同的请求,各个层级的领导也有不同的审批权限:
请假:直接上级有权进行处理
涨工资:只有副社长和社长有权利进行处理
离职:只有社长有权利进行处理
也就是说对于某个员工的请求可能需要一级一级向上传递,如果有权处理那就将其处理掉,如果无权处理还需继续向上传递该请求。像上面这种将对象连成一条链,并沿着这条链传递请求,直到链上有一个对象将请求处理掉为止,这种处理数据的模式叫做责任链模式。使用这种模式有一个好处:处理者可以决定不再沿着链传递 ...
享元模式 - 铁拳卡普
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 拳骨陨石蒙奇·D·卡普,也被称为“铁拳卡普”,是海军中的传奇人物,相传卡普数次将海贼王罗杰逼入绝境,被誉为“海军英雄”。卡普是路飞的爷爷,经常将霸气缠绕在拳头上来打艾斯与路飞的头,因为攻击中充满了爱,所以名为“爱之铁拳”,每次都会在路飞头上留下包。
虽然自己是海军,但是儿子却是革命军,孙子是海贼。拳骨陨石·流星群是卡普的战斗招式之一,即连续不断地向敌人投掷炮弹,其效果就如流星砸向敌人一般。卡普曾以此招在水之七都向路飞告别,我们来回顾一下当时的场景:
关于卡普老爷子的实力是毋庸置疑的,假设我们现在是负责游戏开发的程序猿,要复刻这段场景,其中出现频率最高的就是炮弹。这里有一个很现实的亟待解决的问题:内存的消耗问题。
每个炮弹都是一个对象,每个对象都会占用一块内存
炮弹越多,占用的内存就越大,如果炮弹足够多可能会出现内存枯竭问题
假设内存足够大,频繁的创建炮弹对象,会影响游戏的流畅度,性能低
关于游戏中的炮弹,应该有以下一些需要处理的属性:
炮弹的坐标
...
外观模式 - 桑尼号的狮吼炮
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 开炮桑尼号是草帽一伙的第二艘海贼船,设计者是弗兰奇,使用的材料是价值不菲、世界上最强的巨树“亚当”。主要特色是狮子造形的船头及“士兵船坞系统”,此外还有草皮做成的甲板,附有大型水族馆的房间、图书馆等许多方便的设备。
桑尼号船头的狮吼炮是一个非常厉害的武器。它能够从狮嘴发射出威力超强的加农炮,可利用狮头内部操控室的“狙击圈”自由网罗目标。要发动狮吼炮必须同时使用两桶可乐的能量‘风来喷射’才可以避免后座力让船飞退。
想要发射狮吼炮,操作很简单:瞄准目标,拉动拉杆就可以发射了。但是看似简单的加农炮发射,其底层是需要很多个系统协同配合才能完成的:
可乐注入系统
能量转换系统,将注入的可乐转换成能量
瞄准系统
目标锁定系统
加农炮控制系统
风来炮稳定系统,抵消后坐力,让船体稳定。
这么复杂的系统对于使用者来说其实就是一个按钮加一个拉杆。不论狮吼炮的设计者弗兰奇有没有学过设计模式,但他确实用到了一种设计模式:外观模式。外观模式就是给很多复杂的子系统提供一个简 ...
代理模式 - 电话虫
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 电话虫在海贼中,有一种神奇的通信工具叫做电话虫(Den Den Mushi),外形如蜗牛,身上带有斑点或条纹或通体纯色,壳顶上有对讲机或按键,不接通时会睡觉,接通时会惊醒,并发出“波噜波噜”的声音,在通话时电话虫的嘴巴会如同讲话人的嘴巴一样动,也有人的感情听得懂人类说话,工作原理是将人的声音转化为电话虫的声音进行长距离传接,经作者尾田荣一郎在SBS上证实这是自然生长的一种虫。
如果拥有了属于对方的电话虫,不论彼此相隔有多远都可以进行时时通信,通过电话虫除了可以听到对方的声音,还能看到对方的表情,妥妥的一个代理人。在设计模式中有一种模式叫做代理模式,代理模式和电话虫差不多,都是为其他对象提供一种代理,以控制对这个对象的访问。
生活中关于代理的例子也有很多,比如:
通过信用卡、微信、支付宝等代替现金支付
开发一套对接数据库服务器的接口并提供给客户使用,用于提高服务器的访问效率
跑腿小哥代替大聪明给异地的女盆友送花。
通过VPN架梯子访问外网。
2. 解 ...
桥接模式 - 大海贼时代
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 组建海贼团哥尔·D·罗杰是罗杰海贼团船长。他最终征服了伟大航路,完成了伟大航路的航行,被人们成为海贼王。后来得了绝症,得知自己命不久矣,主动自首并在东海罗格镇被处刑。临死前罗杰的一句话“想要我的宝藏吗?想要的话就全都给你!”
很多人为了梦想,为了罗杰留下的宝藏竞相出海,大海贼时代就此开启。
对于罗杰的行为,最不高兴的肯定是世界政府和海军了,世界政府是海贼中的最高权利机构,海军是世界政府的直属组织,他们以绝对的正义为名在全世界海洋执行维持治安工作。
现在海军的最高统帅也就是海军元帅是赤犬,假设现在赤犬想要将现在已知的所有的海贼团全部记录在册,那么肯定得写个程序,关于如何能够高效的记录和管理这些信息,隶属海军的程序猿们展开了讨论:
如果只记录海贼船的名字肯定的不完整的,这个海贼团内部还有一个完整的组织结构,每个海贼团有若干船员,每个船员有不同的分工,也就是他们的职责不同。
比如草帽海贼团目前一共十个人,分别是:船长、剑士、厨师、航海士、考古学家、船医、音 ...
装饰模式 - 黑胡子
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 马歇尔·D·蒂奇在海贼世界中,马歇尔·D·蒂奇绰号黑胡子,他是黑胡子海贼团的提督、新世界四皇之一,自然系暗暗果实和超人系震震果实能力者,据说他还可以吃下第三个恶魔果实(就目前剧情而言尚未盖棺定论)。
对于黑胡子来说,它拥有的恶魔果实能力并不是与生俱来的,也就是后天获得,恶魔果实能力是对黑胡子原有实力的加成。黑胡子获得的这种恶魔果实能力和设计模式中的装饰模式差不多,都是动态的给一个对象绑定额外的属性(比如:能力、职责、功能等)。
关于装饰模式也可以称之为封装模式,所谓的封装就是在原有行为之上进行拓展,并不会改变该行为,看下面的例子:
在进行网络通信的时候,数据是基于IOS七层或四层网络模型(某些层合并之后就是四层模型)进行传输,通过下图可得知从应用层到物理层,数据每向下走一层就会被封装一层,最后将封装好的数据以比特流的方式发送给接收端。封装之后数据只是变得更复杂了, 并没有改变它是数据的本质。
A端和B端进行网络通信,默认数据是在网络环境中裸奔的,如果 ...
组合模式 - 草帽大船团
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 好大一棵树路飞在德雷斯罗萨打败多弗朗明哥之后,一些被路飞解救的海贼团自愿加入路飞麾下,自此组成了草帽大船团,旗下有7为船长,分别是:
俊美海贼团75人
巴托俱乐部56人
八宝水军1000人
艾迪欧海贼团4人
咚塔塔海贼团200人
巨兵海贼团5人
约塔玛利亚大船团4300人
小弟数量总计5640人。
对于草帽大船团的结构组成,很像一棵树:路飞是这棵树的根节点,旗下的七个船长是路飞的子节点。在这七个船长的旗下可能还有若干个船长。。。
像草帽大船团这样,能将多个对象组成一个树状结构,用以描述部分—整体的层次关系,使得用户对单个对象和组合对象的使用具有一致性,这样的结构性设计模式叫做组合模式。
现实生活中能够和组合模式对应的场景也有很多,下面举例说明:
Linux 的树状目录结构
国家的行政区划分(省级、地级、县级、乡级)
解放军编制(军、师、旅、团、营、连、排、班)
公司的组织结构(树状)
2. 大决战在海贼中,大家都预测路飞的对手应该是同为四皇的黑胡 ...
适配器模式 - 托尼托尼·乔巴
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 翻译家在海贼王中,托尼托尼·乔巴(Tony Tony Chopper)是草帽海贼团的船医,它本来是一头驯鹿,但是误食了动物系·人人果实之后可以变成人的形态。
乔巴吃了恶魔果实之后的战斗力暂且抛开不谈,说说它掌握的第二技能:语言,此时的他既能听懂人的语言,又能听懂动物语言,妥妥的语言学家。
人和动物本来无法直接交流,但是有了乔巴的存在,就相当于了有了一条纽带,一座桥梁,使得二者之间能够顺畅的沟通。在这里边,乔巴充当的就是一个适配器,将一个类的接口转换成用户希望的另一个接口,使不兼容的对象能够相互配合并一起工作,这种模式就叫适配器模式。说白了,适配器模式就相当于找了一个翻译。
需要适配器的例子或者场景很多,随便列举几个:
STL标准模板库有六大组件,其中之一的就是适配器。
六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间适配器。
适配器又可以分为:容器适配器、函数适配器、迭代器适配器
台湾省的电压是110V,大陆是220V,如果他们把大陆的电 ...
建造者模式 - 卡雷拉公司
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 造船,我是专业的在海贼世界中,水之都拥有全世界最好的造船技术,三大古代兵器之一的冥王就是由岛上的造船技师们制造出来的。现在岛上最大、最优秀的造船公司就是卡雷拉公司,它的老板还是水之都的市长,财富权力他都有,妥妥的人生赢家。
众所周知,在冰山身边潜伏着很多卧底,他们都是世界政府直属秘密谍报机关 CP9成员,目的是要得到古代兵器冥王的设计图,但是很不幸图纸后来被弗兰奇烧掉了。既然他们造船这么厉害,我也来到了卡雷拉公司,学习一下他们是怎么造船的。
1.1 桑尼号以下是我拿到的冰山和弗兰奇给路飞造的桑尼号的部分设计图纸:
通过图纸可以感受到造一艘船的工序是极其复杂的,看到这儿,曾经作为程序猿的我又想到了写程序,如果只通过一个类直接把这种结构的船构建出来完全是不可能,先不说别的光构造函数的参数就已经不计其数了。
冰山给出的解决方案是化繁为简,逐个击破。也就是分步骤创建复杂的对象,并且允许使用相同的代码生成不同类型和形式的对象,他说这种模式叫做生成器模式(也 ...