设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 抹除奥哈拉在海贼世界中,大约800年前,存在着一个繁荣一时的“巨大王国”,该王国在败给了世界政府联军后便不复存在,因此也留下了一段“空白一百年”的历史。三叶草博士认为,这个国家在败给世界政府的联军之前,就已经做好的失败的思想准备,为了把思想留给未来,于是把所有真相都刻在了石头上,也是就历史正文。
22年前,世界政府发现奥哈拉的考古学者们在对历史正文进行研究,于是派人前去逮捕他们。随后,CP9长官斯潘达因对奥哈拉发动了屠魔令,整座岛屿仅妮可·罗宾一人逃走 。翌年,“奥哈拉”这个名字已从地图上消失。
其实历史正文就是对空白的一百年历史的记录,我们可以认为这就是一份备忘录,解读出了历史正文就等于还原了历史,里边肯定记录着世界政府干过的一些见不得光的事情,不得不说“巨大王国”的人们还是很聪明的。
在设计模式中也有一种备份数据的模式叫做备忘录模式,关于这种模式的定义是这样的在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后在 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 中介者在海贼世界中,世界政府是拥有170个以上加盟国,依靠牢固的结盟而生成的最大规模的国际组织,以“世界”自居,支配整个世界,守卫掌管司法世界的秩序。世界政府以“绝对正义”的名义维护着世界的安全,为了铲除邪恶以及非法的事物可以不择手段,甚至杀害无辜的人,至于该事物是否“正义”则由政府说了算。
虽然在海贼的世界格局是非常混乱的,但是如果没有世界政府的存在它将更加混乱。以程序猿的视角来看,每个国家都是一个对象,一个国家需要和其它的很多国家都产生交集,这就难免产生冲突、掠夺和战争。如果有世界政府的存在,就可以在一定程度上避免各个国家之间的正面直接接触(对象解耦),还能起到一定的调节作用。
关于世界政府的这种组织形式,在设计模式中被称之为中介者模式。中介者模式可以减少对象之间混乱无序的依赖关系,从而使其耦合松散,限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。
如果不使用中介者模式,各个国家之间的关系就是一个网状结构,关系错综复杂,这样的系统也很 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 凯多的烦恼百兽海贼团是由原新世界的四皇之一“百兽”凯多创建并领导的海贼团。其成员多为恶魔果实动物系能力者(或人造恶魔果实能力者),被称之为最强大的海贼团体,其大本营驻扎在新世界的和之国海域的鬼之岛上。其成员按照职位高低来分类,分为:总督(1人),大看板(3人),真打,编号者,给赋者,爆笑者,等待者,小弟更是不计其数。
通过上面的介绍可以得知,百兽海贼团的结构是一个树状结构,而且人员众多。假设我们要将百兽海贼团中的成员逐一遍历一遍,应该如何处理呢?
如果按照海贼团的等级划分来存储这些团员信息,遍历他们有两种方式:深度优先搜索和广度优先搜索;如果存储海贼团成员信息的时候使用的是线性表或者其他结构,现有的遍历算法可能就不再适用了,最优的解决方案就是将集合与它对应的遍历算法解耦。
所以我们需要提供一种解决方案使其能够顺序访问一个集合对象中的各个元素,而又不暴露该集合底层的表现形式(列表、栈、树、图等),这种行为设计模式就叫迭代器模式。
关于迭代器模式,现 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 海上餐厅在海贼世界中,巴拉蒂是位于东海桑巴斯海域的一个海上餐厅。外形是条巨型的船,船两头有鱼形状的船首,整艘船能转换成战斗状态。巴拉蒂是东海最有名的餐厅,有不少人特地为了品尝老板兼主厨哲普所做的美味料理而来到这里,甚至连海军的重要角色都会来这里吃饭。
当出身东海的路飞路过巴拉蒂餐厅的时候,由于损坏了餐厅的财物,被强行扣留下来打工以此偿还他造成的损失,替自己赎身。这天来了几个人吃饭,路飞作为服务员接待他们点餐。意料之中,他又把事儿搞砸了,下面作为程序猿的我打算替路飞写一个点餐的小程序,先来分析需求:
允许顾客点多个菜,点餐完毕后,厨师才开始制作
点餐过程中需要及时提醒顾客,这个菜现在是不是可以制作(可能原材料用完了)
需要有点餐记录,结账的时候用
顾客可以取消已下单但是还没有制作的菜
如果想要实现上述的需求,需要在程序中准备如下几个对象:
替顾客下单的服务员路飞
给顾客炒菜的厨师哲普
由路飞写好的顾客点餐列表
我们可以将顾客的点餐列表看作是 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 犯罪公司在海贼世界中,巴洛克工作社是驻扎于阿拉巴斯坦的秘密犯罪公司,社长是王下七武海之一的沙·克洛克达尔。巴洛克工作社的名义上的目的是推翻阿拉巴斯坦建立理想王国,真正目的是得到古代兵器“冥王”从而获得更强大的力量。先来看一下这个公司的组织结构:
虽然巴洛克工作社是个犯罪公司,但是其内部的组织结构和分工是非常明确的。假设大聪明是这个组织中最卑微的百万长者,那么有任何需求都需要向上级汇报等待审批,比如请假、涨工资、离职等,对于不同的请求,各个层级的领导也有不同的审批权限:
请假:直接上级有权进行处理
涨工资:只有副社长和社长有权利进行处理
离职:只有社长有权利进行处理
也就是说对于某个员工的请求可能需要一级一级向上传递,如果有权处理那就将其处理掉,如果无权处理还需继续向上传递该请求。像上面这种将对象连成一条链,并沿着这条链传递请求,直到链上有一个对象将请求处理掉为止,这种处理数据的模式叫做责任链模式。使用这种模式有一个好处:处理者可以决定不再沿着链传 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 拳骨陨石蒙奇·D·卡普,也被称为“铁拳卡普”,是海军中的传奇人物,相传卡普数次将海贼王罗杰逼入绝境,被誉为“海军英雄”。卡普是路飞的爷爷,经常将霸气缠绕在拳头上来打艾斯与路飞的头,因为攻击中充满了爱,所以名为“爱之铁拳”,每次都会在路飞头上留下包。
虽然自己是海军,但是儿子却是革命军,孙子是海贼。拳骨陨石·流星群是卡普的战斗招式之一,即连续不断地向敌人投掷炮弹,其效果就如流星砸向敌人一般。卡普曾以此招在水之七都向路飞告别,我们来回顾一下当时的场景:
关于卡普老爷子的实力是毋庸置疑的,假设我们现在是负责游戏开发的程序猿,要复刻这段场景,其中出现频率最高的就是炮弹。这里有一个很现实的亟待解决的问题:内存的消耗问题。
每个炮弹都是一个对象,每个对象都会占用一块内存
炮弹越多,占用的内存就越大,如果炮弹足够多可能会出现内存枯竭问题
假设内存足够大,频繁的创建炮弹对象,会影响游戏的流畅度,性能低
关于游戏中的炮弹,应该有以下一些需要处理的属性:
炮弹的坐 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 开炮桑尼号是草帽一伙的第二艘海贼船,设计者是弗兰奇,使用的材料是价值不菲、世界上最强的巨树“亚当”。主要特色是狮子造形的船头及“士兵船坞系统”,此外还有草皮做成的甲板,附有大型水族馆的房间、图书馆等许多方便的设备。
桑尼号船头的狮吼炮是一个非常厉害的武器。它能够从狮嘴发射出威力超强的加农炮,可利用狮头内部操控室的“狙击圈”自由网罗目标。要发动狮吼炮必须同时使用两桶可乐的能量‘风来喷射’才可以避免后座力让船飞退。
想要发射狮吼炮,操作很简单:瞄准目标,拉动拉杆就可以发射了。但是看似简单的加农炮发射,其底层是需要很多个系统协同配合才能完成的:
可乐注入系统
能量转换系统,将注入的可乐转换成能量
瞄准系统
目标锁定系统
加农炮控制系统
风来炮稳定系统,抵消后坐力,让船体稳定。
这么复杂的系统对于使用者来说其实就是一个按钮加一个拉杆。不论狮吼炮的设计者弗兰奇有没有学过设计模式,但他确实用到了一种设计模式:外观模式。外观模式就是给很多复杂的子系统提供一个 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 电话虫在海贼中,有一种神奇的通信工具叫做电话虫(Den Den Mushi),外形如蜗牛,身上带有斑点或条纹或通体纯色,壳顶上有对讲机或按键,不接通时会睡觉,接通时会惊醒,并发出“波噜波噜”的声音,在通话时电话虫的嘴巴会如同讲话人的嘴巴一样动,也有人的感情听得懂人类说话,工作原理是将人的声音转化为电话虫的声音进行长距离传接,经作者尾田荣一郎在SBS上证实这是自然生长的一种虫。
如果拥有了属于对方的电话虫,不论彼此相隔有多远都可以进行时时通信,通过电话虫除了可以听到对方的声音,还能看到对方的表情,妥妥的一个代理人。在设计模式中有一种模式叫做代理模式,代理模式和电话虫差不多,都是为其他对象提供一种代理,以控制对这个对象的访问。
生活中关于代理的例子也有很多,比如:
通过信用卡、微信、支付宝等代替现金支付
开发一套对接数据库服务器的接口并提供给客户使用,用于提高服务器的访问效率
跑腿小哥代替大聪明给异地的女盆友送花。
通过VPN架梯子访问外网。
2. ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 组建海贼团哥尔·D·罗杰是罗杰海贼团船长。他最终征服了伟大航路,完成了伟大航路的航行,被人们成为海贼王。后来得了绝症,得知自己命不久矣,主动自首并在东海罗格镇被处刑。临死前罗杰的一句话“想要我的宝藏吗?想要的话就全都给你!”
很多人为了梦想,为了罗杰留下的宝藏竞相出海,大海贼时代就此开启。
对于罗杰的行为,最不高兴的肯定是世界政府和海军了,世界政府是海贼中的最高权利机构,海军是世界政府的直属组织,他们以绝对的正义为名在全世界海洋执行维持治安工作。
现在海军的最高统帅也就是海军元帅是赤犬,假设现在赤犬想要将现在已知的所有的海贼团全部记录在册,那么肯定得写个程序,关于如何能够高效的记录和管理这些信息,隶属海军的程序猿们展开了讨论:
如果只记录海贼船的名字肯定的不完整的,这个海贼团内部还有一个完整的组织结构,每个海贼团有若干船员,每个船员有不同的分工,也就是他们的职责不同。
比如草帽海贼团目前一共十个人,分别是:船长、剑士、厨师、航海士、考古学家、船医 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 马歇尔·D·蒂奇在海贼世界中,马歇尔·D·蒂奇绰号黑胡子,他是黑胡子海贼团的提督、新世界四皇之一,自然系暗暗果实和超人系震震果实能力者,据说他还可以吃下第三个恶魔果实(就目前剧情而言尚未盖棺定论)。
对于黑胡子来说,它拥有的恶魔果实能力并不是与生俱来的,也就是后天获得,恶魔果实能力是对黑胡子原有实力的加成。黑胡子获得的这种恶魔果实能力和设计模式中的装饰模式差不多,都是动态的给一个对象绑定额外的属性(比如:能力、职责、功能等)。
关于装饰模式也可以称之为封装模式,所谓的封装就是在原有行为之上进行拓展,并不会改变该行为,看下面的例子:
在进行网络通信的时候,数据是基于IOS七层或四层网络模型(某些层合并之后就是四层模型)进行传输,通过下图可得知从应用层到物理层,数据每向下走一层就会被封装一层,最后将封装好的数据以比特流的方式发送给接收端。封装之后数据只是变得更复杂了, 并没有改变它是数据的本质。
A端和B端进行网络通信,默认数据是在网络环境中裸奔的,如 ...