设计模式
未读
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
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: ...
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 工厂模式的特点在海贼王中,作为原王下七武海之一的多弗朗明哥,可以说是新世界最大的流氓头子,拥有无上的权利和无尽的财富。他既是德雷斯罗萨国王又是地下世界的中介,控制着世界各地的诸多产业,人造恶魔果实工厂就是其中之一。
人造恶魔果实的最大买家是四皇之一的凯多,凯多其实很明智,他没有自己去生产,可能有这么几个因素:
凯多手下没有像凯撒·库朗一样的科学家,无法掌握生产人造恶魔果实这种顶级的科学技术【意味着构造一个对象有时候需要经历一个非常复杂的操作流程,既然麻烦那索性就不干了】。
有需求下单就行,只需关心结果,无需关心过程【实现了解耦合】。
人造恶魔果实出了问题,自己无责任,售后直接找明哥【便于维护】。
在我们现实生活中也是一样,买馒头和自己蒸馒头、去饭店点一份大盘鸡和自己养鸡,杀鸡,做大盘鸡,这是全然不同的两种体验:
自己做麻烦,而且有失败的风险,需要自己承担后果。
买现成的,可以忽略制作细节,方便快捷并且无风险,得到的肯定是美味的食物。
对于后者 ...
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
我们在进行程序设计的时候,要尽可能地保证程序的可扩展性、可维护性和可读性,所以需要使用一些设计模式,这些设计模式都遵循了以下三个原则,下面来依次为大家介绍。
单一职责原则C++面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类,所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。
设计模式中所谓的单一职责原则,就是对一个类而言,应该仅有一个引起它变化的原因,其实就是将这个类所承担的职责单一化(就跟海贼王中的能力者一样,每个人只能吃一颗恶魔果实,拥有某一种能力【黑胡子这个Bug除外】)。
如果一个类承担的职责过多,就等于把这些职责耦合到了一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致设计变得脆弱,当变化发生时,设计会遭受到意想不到的破坏。
偷袭白胡子的这个男人被白胡子视为自己的儿子,他叫斯库亚德,本来是一起去救艾斯的【此时的他是一个单一职责的类】,后来被赤犬挑拨离间想到了自己的过去,并萌生了别的想 ...
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
面向对象设计主要就是使用UML的类图,类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。下面基于C++这门语言给大家讲一下UML类图的画法。
类的UML画法类(class / struct)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。在系统中,每个类都具有一定的职责,职责指的是类要完成什么样子的功能,要承担什么样子的义务。一个类可以有多种职责,但是设计得好的类一般只有一种职责。
比如,我现在定义了猎人类:
1234567891011121314151617181920212223242526272829303132333435363738394041class Hunter{public: int m_age = 32; static int m_times; string getN ...