设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 厨师山治山治是文斯莫克家族的第三子,基因改造人,由于小时候未能觉醒能力而被父亲文斯莫克·伽治放逐到东海。遇见恩师哲普后在海上餐厅巴拉蒂担任厨师。为了寻找传说之海ALL BLUE而随草帽一伙踏入伟大航路。
在海上航行的每一天里,最忙的应该就是山治了。他需要准备食材、做早饭、做午饭、做下午茶、做晚饭,一整天都在不同的状态之间忙碌。
在设计模式中有一种和山工作治状态类似的模式叫做状态模式。状态模式就是在一个类的内部会有多种状态的变化,因为状态变化从而导致其行为的改变,在类的外部看上去这个类就像是自身发生了改变一样。
在日常生活中由于内部属性的变化导致外在样貌或者行为发生改变的例子比比皆是,比如:
人在幼年、童年、少年、中年、老年各个使其的形态都是不一样的
工作期间,上午、中午、下午、傍晚、深夜的工作状态也不一样
人的心情不同时,会有喜、怒、哀、乐
手机在待机、通话、充电、游戏时的状态也不一样
文章的发表会有草稿、审阅、发布状态
状态模式和策略 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 橡胶人路飞是要成为海贼王的男人!在小时候因为误食了红发香克斯找到的橡胶恶魔果实成了橡胶人。对于果实能力,路飞现在已经开发出了五个档位。对于路飞而言在战斗的时候,必须要根据敌人的情况来实时制定合适的策略,使用不同的档位的不同招式去应对来自对方的攻击。
路飞在战斗的时候需要制定策略,在设计模式中也有一种和策略相关的模式叫做策略模式。策略模式需要我们定义一系列的算法,并且将每种算法都放入到独立的类中,在实际操作的时候使这些算法对象可以相互替换。
在日常生活中很多时候都需要制定策略,在程序中就可用使用策略模式来处理这些场景,比如:
出行策略,可以选择不同的交通工具:自行车、公交、地铁、自驾等
战国时期秦国的外交政策:远交近攻
收复台湾的策略:武统、文统、恩威并施 。。。
电商平台的打折策略:买二赠一、满300减50、购买VIP享8折优惠。。。
2. 百变路飞作为橡胶人路飞,平时白痴但战斗时头脑异常清醒,会根据敌我双方的形式做出正确的判断:
对手 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 新闻大亨摩根斯是海贼世界中一个比较神秘的人物,他是世界经济新闻社的社长,人称“大新闻摩根斯”。他总是能非常轻松地搞到第一手情报,将其印成报纸,并由自家的送报鸟把报纸送到世界各地。
先不去深究摩根斯是如何快速得到世界各地的动态以及得到一些秘密情报,暂且认为他是豢养了一支空中狗仔队,在全世界的上空进行24小时无死角监视。对于摩根斯的新闻社我们可以将其看作是消息的发布者,对于购买报纸的各国人民或者是海上的海贼,我们可以将他们看作是消息的观察者或者订阅者。
在设计模式中也有一种类似的描述行为的模式,叫做观察者模式。观察者模式允许我们定义一种订阅机制,可在对象事件发生时通知所有的观察者对象,使它们能够自动更新。观察者模式还有另外一个名字叫做“发布-订阅”模式。
观察者模式在日常生活中也很常见,比如:
使用的社交软件,当关注的博主更新了内容,会收到提示信息
购买的商品被送到菜鸟驿站,会收到驿站发送的提示信息
订阅了报刊,每天/每月都会收到新的报纸或者 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 抹除奥哈拉在海贼世界中,大约800年前,存在着一个繁荣一时的“巨大王国”,该王国在败给了世界政府联军后便不复存在,因此也留下了一段“空白一百年”的历史。三叶草博士认为,这个国家在败给世界政府的联军之前,就已经做好的失败的思想准备,为了把思想留给未来,于是把所有真相都刻在了石头上,也是就历史正文。
22年前,世界政府发现奥哈拉的考古学者们在对历史正文进行研究,于是派人前去逮捕他们。随后,CP9长官斯潘达因对奥哈拉发动了屠魔令,整座岛屿仅妮可·罗宾一人逃走 。翌年,“奥哈拉”这个名字已从地图上消失。
其实历史正文就是对空白的一百年历史的记录,我们可以认为这就是一份备忘录,解读出了历史正文就等于还原了历史,里边肯定记录着世界政府干过的一些见不得光的事情,不得不说“巨大王国”的人们还是很聪明的。
在设计模式中也有一种备份数据的模式叫做备忘录模式,关于这种模式的定义是这样的在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后在 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 中介者在海贼世界中,世界政府是拥有170个以上加盟国,依靠牢固的结盟而生成的最大规模的国际组织,以“世界”自居,支配整个世界,守卫掌管司法世界的秩序。世界政府以“绝对正义”的名义维护着世界的安全,为了铲除邪恶以及非法的事物可以不择手段,甚至杀害无辜的人,至于该事物是否“正义”则由政府说了算。
虽然在海贼的世界格局是非常混乱的,但是如果没有世界政府的存在它将更加混乱。以程序猿的视角来看,每个国家都是一个对象,一个国家需要和其它的很多国家都产生交集,这就难免产生冲突、掠夺和战争。如果有世界政府的存在,就可以在一定程度上避免各个国家之间的正面直接接触(对象解耦),还能起到一定的调节作用。
关于世界政府的这种组织形式,在设计模式中被称之为中介者模式。中介者模式可以减少对象之间混乱无序的依赖关系,从而使其耦合松散,限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。
如果不使用中介者模式,各个国家之间的关系就是一个网状结构,关系错综复杂,这样的系统也很 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 凯多的烦恼百兽海贼团是由原新世界的四皇之一“百兽”凯多创建并领导的海贼团。其成员多为恶魔果实动物系能力者(或人造恶魔果实能力者),被称之为最强大的海贼团体,其大本营驻扎在新世界的和之国海域的鬼之岛上。其成员按照职位高低来分类,分为:总督(1人),大看板(3人),真打,编号者,给赋者,爆笑者,等待者,小弟更是不计其数。
通过上面的介绍可以得知,百兽海贼团的结构是一个树状结构,而且人员众多。假设我们要将百兽海贼团中的成员逐一遍历一遍,应该如何处理呢?
如果按照海贼团的等级划分来存储这些团员信息,遍历他们有两种方式:深度优先搜索和广度优先搜索;如果存储海贼团成员信息的时候使用的是线性表或者其他结构,现有的遍历算法可能就不再适用了,最优的解决方案就是将集合与它对应的遍历算法解耦。
所以我们需要提供一种解决方案使其能够顺序访问一个集合对象中的各个元素,而又不暴露该集合底层的表现形式(列表、栈、树、图等),这种行为设计模式就叫迭代器模式。
关于迭代器模式,现 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 海上餐厅在海贼世界中,巴拉蒂是位于东海桑巴斯海域的一个海上餐厅。外形是条巨型的船,船两头有鱼形状的船首,整艘船能转换成战斗状态。巴拉蒂是东海最有名的餐厅,有不少人特地为了品尝老板兼主厨哲普所做的美味料理而来到这里,甚至连海军的重要角色都会来这里吃饭。
当出身东海的路飞路过巴拉蒂餐厅的时候,由于损坏了餐厅的财物,被强行扣留下来打工以此偿还他造成的损失,替自己赎身。这天来了几个人吃饭,路飞作为服务员接待他们点餐。意料之中,他又把事儿搞砸了,下面作为程序猿的我打算替路飞写一个点餐的小程序,先来分析需求:
允许顾客点多个菜,点餐完毕后,厨师才开始制作
点餐过程中需要及时提醒顾客,这个菜现在是不是可以制作(可能原材料用完了)
需要有点餐记录,结账的时候用
顾客可以取消已下单但是还没有制作的菜
如果想要实现上述的需求,需要在程序中准备如下几个对象:
替顾客下单的服务员路飞
给顾客炒菜的厨师哲普
由路飞写好的顾客点餐列表
我们可以将顾客的点餐列表看作是 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 犯罪公司在海贼世界中,巴洛克工作社是驻扎于阿拉巴斯坦的秘密犯罪公司,社长是王下七武海之一的沙·克洛克达尔。巴洛克工作社的名义上的目的是推翻阿拉巴斯坦建立理想王国,真正目的是得到古代兵器“冥王”从而获得更强大的力量。先来看一下这个公司的组织结构:
虽然巴洛克工作社是个犯罪公司,但是其内部的组织结构和分工是非常明确的。假设大聪明是这个组织中最卑微的百万长者,那么有任何需求都需要向上级汇报等待审批,比如请假、涨工资、离职等,对于不同的请求,各个层级的领导也有不同的审批权限:
请假:直接上级有权进行处理
涨工资:只有副社长和社长有权利进行处理
离职:只有社长有权利进行处理
也就是说对于某个员工的请求可能需要一级一级向上传递,如果有权处理那就将其处理掉,如果无权处理还需继续向上传递该请求。像上面这种将对象连成一条链,并沿着这条链传递请求,直到链上有一个对象将请求处理掉为止,这种处理数据的模式叫做责任链模式。使用这种模式有一个好处:处理者可以决定不再沿着链传 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 拳骨陨石蒙奇·D·卡普,也被称为“铁拳卡普”,是海军中的传奇人物,相传卡普数次将海贼王罗杰逼入绝境,被誉为“海军英雄”。卡普是路飞的爷爷,经常将霸气缠绕在拳头上来打艾斯与路飞的头,因为攻击中充满了爱,所以名为“爱之铁拳”,每次都会在路飞头上留下包。
虽然自己是海军,但是儿子却是革命军,孙子是海贼。拳骨陨石·流星群是卡普的战斗招式之一,即连续不断地向敌人投掷炮弹,其效果就如流星砸向敌人一般。卡普曾以此招在水之七都向路飞告别,我们来回顾一下当时的场景:
关于卡普老爷子的实力是毋庸置疑的,假设我们现在是负责游戏开发的程序猿,要复刻这段场景,其中出现频率最高的就是炮弹。这里有一个很现实的亟待解决的问题:内存的消耗问题。
每个炮弹都是一个对象,每个对象都会占用一块内存
炮弹越多,占用的内存就越大,如果炮弹足够多可能会出现内存枯竭问题
假设内存足够大,频繁的创建炮弹对象,会影响游戏的流畅度,性能低
关于游戏中的炮弹,应该有以下一些需要处理的属性:
炮弹的坐 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 开炮桑尼号是草帽一伙的第二艘海贼船,设计者是弗兰奇,使用的材料是价值不菲、世界上最强的巨树“亚当”。主要特色是狮子造形的船头及“士兵船坞系统”,此外还有草皮做成的甲板,附有大型水族馆的房间、图书馆等许多方便的设备。
桑尼号船头的狮吼炮是一个非常厉害的武器。它能够从狮嘴发射出威力超强的加农炮,可利用狮头内部操控室的“狙击圈”自由网罗目标。要发动狮吼炮必须同时使用两桶可乐的能量‘风来喷射’才可以避免后座力让船飞退。
想要发射狮吼炮,操作很简单:瞄准目标,拉动拉杆就可以发射了。但是看似简单的加农炮发射,其底层是需要很多个系统协同配合才能完成的:
可乐注入系统
能量转换系统,将注入的可乐转换成能量
瞄准系统
目标锁定系统
加农炮控制系统
风来炮稳定系统,抵消后坐力,让船体稳定。
这么复杂的系统对于使用者来说其实就是一个按钮加一个拉杆。不论狮吼炮的设计者弗兰奇有没有学过设计模式,但他确实用到了一种设计模式:外观模式。外观模式就是给很多复杂的子系统提供一个 ...