设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
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 桑尼号以下是我拿到的冰山和弗兰奇给路飞造的桑尼号的部分设计图纸:
通过图纸可以感受到造一艘船的工序是极其复杂的,看到这儿,曾经作为程序猿的我又想到了写程序,如果只通过一个类直接把这种结构的船构建出来完全是不可能,先不说别的光构造函数的参数就已经不计其数了。
冰山给出的解决方案是化繁为简,逐个击破。也就是分步骤创建复杂的对象,并且允许使用相同的代码生成不同类型和形式的对象,他说这种模式叫做生成器 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 克隆人在海贼王世界中,杰尔马王国拥有一支强大的科学作战部队 – 杰尔马66军团,其先锋是文斯莫克家族,他们作为雇佣军活跃在世界各地。
这支部队战斗力强悍,没有情感,不畏生死,勇往直前。从某种意义上来讲,他们不能被称之为人,因为他们是科学的结晶,他们都出自文斯莫克·伽治之手。
伽治曾和海贼世界中的顶级科学家贝加庞克是同事,一起发现了血统因子,于是才有了现在这么多的杰尔马士兵,对,你没有看错他们都是被克隆出来的。
克隆是一种最直接、最快捷的创建新对象的方式,它不仅隐藏了创建新对象的诸多细节,还保留了源对象的属性信息,保证了这两个对象能够一模一样。
从血统因子到士兵这是一个复杂而又艰辛的过程,一旦研发成功,之后的事情就是基于母体进行复制(克隆)。我猜伽治不仅是一名科学家,可能还是一位架构师,因为他懂设计模式,这种制作克隆人的模式就是原型模式。
原型模式就是能够复制已有的对象,而又无需使代码依赖它们所属的类。换种说法,就是通过已有对象克隆出另一个新的对象 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 巴基的订单在海贼世界中,巴基速递是巴基依靠手下强大的越狱犯兵力,组建的集团海贼派遣公司,它的主要业务是向世界有需要的地方输送雇佣兵(其实是不干好事儿)。
自从从特拉法尔加罗和路飞同盟击败了堂吉诃德家族 ,战争的市场对雇佣兵的依赖越来越大。订单便源源不断的来了。此时我们来分析一个问题:巴基是怎么接单并且派单的呢?
简单来说,巴基肯定是有一个账本用于记录下单者信息,下单者的需求以及下单的时间,然后根据下单的先后顺序选择合适的人手进行派单。从程序猿的视角可以这样认为,这个账本其实就相当于一个任务队列:
有一定的容量,可以存储任务
按照下单的先后顺序存储并处理任务 – 典型的队列特性:先进先出
对于巴基来说把所有的订单全部记录到一个账本上就够了,如果将其平移到项目中,也就意味着应用程序在运行过程中存储任务的任务队列一个足矣,弄太多反而冗余,不太好处理了。
在一个项目中,全局范围内,某个类的实例有且仅有一个,通过这个唯一实例向其他模块提供数据的全局访问,这 ...
设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 奔向大海在海贼世界中,位于水之都的弗兰奇一家是由铁人弗兰奇所领导的以拆船为职业的家族,当然了他们的逆向工程做的也很好,会拆船必然会造船。船是海贼们出海所必备的海上交通工具,它由很多的零件组成,从宏观上看它有这么几个组成部分:船体、动力系统、武器。
有一天我攒够了钱要出海,找到了弗兰奇一家,发现他们的老大跟着草帽路飞出海了,但是我还是选择相信他们的技术。下面是他们给我制定的造船方案,根据我的购买力提供了不同型号的海贼船,一共是三个级别,如下表:
基础型
标准型
旗舰型
船体
木头
钢铁
合成金属
动力
手动
内燃机
核能
武器
枪
速射炮
激光
根据这个表,在造船的时候需要根据不同的型号选择相应的零部件,在设计程序的时候还需要保证遵循开放-封闭原则,即添加了新型号之后不需要修改原有代码,而是添加新的代码。
1.1 船体因为要建造的这艘船是由多个部件组成的并且每个部件还有不同的品级可供选择,先说船体,关于船体材料的这个属性是可变的, ...
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 简单工厂模式的弊端在上一节简单工厂模式中,创建了一个工厂类,用于生产需要的对象,但是这种方式有一个弊端,它违反了设计模式中的开放-封闭原则,先来看相关的代码:
123456789101112131415161718192021222324252627// 恶魔果实工厂类enum class Type:char{SHEEP, LION, BAT};class SmileFactory{public: SmileFactory() {} ~SmileFactory() {} AbstractSmile* createSmile(Type type) { AbstractSmile* ptr = nullptr; switch (type) { case Type::SHEEP: ...