设计模式
文章平均质量分 85
码炫课堂-码哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式综合实例分析之数据库同步系统(三)
在图9中,TempTableSynCommand充当抽象命令,MacroCommand充当宏命令类,RenameTableCommand、SynTableDataCommand和RenameTableConstraintCommand充当具体命令,TempTableSynStrategy充当请求调用者,DataSynHelper充当请求接收者,在DataSynHelper中定义了辅助实现临时表方式同步的一些方法,在命令类中将调用这些方法。码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-26 10:28:42 · 815 阅读 · 0 评论 -
设计模式综合实例分析之数据库同步系统(二)
在数据库同步时,如果DBSynchronizeManager的executeSyn()方法被调用,将遍历观察者集合,调用每一个DBObjectSynchronizer对象的executeSyn()方法和compileDBObject()方法,此时DBSynchronizeManager充当抽象观察目标,OracleDBSynchronizeManager充当具体观察目标,DBObjectSynchronizer充当抽象观察者,OracleTableDBSynchronizer充当具体观察者。原创 2024-11-26 10:27:50 · 843 阅读 · 0 评论 -
设计模式综合实例分析之数据库同步系统(一)
用户在操作界面指定源数据库、目标数据库、控制数据库(用于读取配置信息)的数据库连接串,同时选取需要同步的数据库对象类型,对象类型存储在配置文件database_syn_config.xml中,通过输入SQL语句可以获取需要同步的表数据。”的问题,希望我能够给出一些相对比较完整的真实项目实例,为了满足大家的要求,在后续文章中,我将拿出几个较为复杂的实例与大家一起分享,有些项目是我参与开发的,有些项目是在我的指导下开发的,希望能给大家带来帮助!在本系统实现过程中使用了多种设计模式,下面对其进行简要分析(原创 2024-11-26 10:26:58 · 1215 阅读 · 0 评论 -
多人联机射击游戏中的设计模式应用(二)
在Player类中,name属性表示角色名,type属性表示角色类型,如“战队A”或“战队B”等。在图9中,GamepadsAdapter充当适配器,它将游戏手柄中按键(GamepadsKey)的方法适配到现有系统中,在其move()方法中可以调用MoveKey类的handle()方法,在其shot()方法中可以调用ShotKey的handle()方法,从而实现通过手柄来控制游戏运行。联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。,兼职码炫课堂主讲源码系列专题。原创 2024-11-26 10:25:35 · 813 阅读 · 0 评论 -
多人联机射击游戏中的设计模式应用(一)
在图2中,PlayerCreatorDirector充当指挥者角色,PlayerBuilder是抽象建造者,其子类PlayerBuilderA和PlayerBuilderB是具体建造者,用于创建不同的游戏角色,Player是所创建的完整产品,即完整的游戏角色,它包含形体(body)、服装(costume)和武器(weapon)等组成部分。如果需要在游戏的升级版本中增加一个新功能,只需增加一个新的具体命令类,可通过修改配置文件来为其设置对应的按键,原有类库代码无需任何修改,很好地符合开闭原则。原创 2024-11-26 10:25:00 · 1251 阅读 · 0 评论 -
设计模式与足球(四)
*(20) 状态模式:**踢足球是要看状态的,当然状态是会转换的。有的专门研究一场比赛中每个球员的跑动距离,有的研究每个球员的抢断次数,有的研究每个球员的射门次数,有的研究球员传球次数,有的研究球员传球成功率......如果将每一种研究类型看成一个访问者,那么球队就是一个包含多个队员元素的对象结构,以供不同访问者来研究,此时,教练是观察目标,球员是观察者,观察目标与观察者之间有一对多的联动,当然裁判也可以看成是球员的观察目标,终场哨一吹,西班牙乐成一片,意大利哭成一片,不同的观察者反应还真的有所不同,原创 2024-11-26 10:24:03 · 889 阅读 · 0 评论 -
设计模式与足球(三)
布冯手抛球给基耶利尼、基耶利尼传给皮尔洛、皮尔洛带球过人之后将球直塞给快速插上的巴洛特利,巴洛特利倒钩射门,球进了,球进了,又是巴洛特利,巴洛特利立功了,伟大的意大利前锋!:在足球场上,教练的手势就是一门语言,有的表示“传球”,有的表示“全线压上”,有的表示“全线防守”,每个队员都需要在比赛中阅读教练的手势并将其转换成执行指令,按照教练的意图来展开攻守。在此,足球就是一个请求,而球员就是请求的处理者,足球在球员间不断进行传递,构成了一条传递链。码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-26 10:23:07 · 335 阅读 · 0 评论 -
设计模式与足球(二)
2012年欧洲杯一共分为四个组,每个组四个队,每个队有23名球员,如果要用一个图来表示2012年欧洲杯全体球员及各国分组情况,不用说,一定是个树状图,组里有队,队里有人,如果想要召开B组(赛前公认的死亡之组)队员大会,在B组的节点上写下通知:“下午3点,召开重要会议,事关出线!:很多足球队都喜欢请外国教练(其中有一支我们都非常熟悉的国家队,名字偶就不说了,大家都懂的),外国教练请回来通常很难跟队员直接交流(语言不通),因此需要配翻译,此时,翻译充当了教练和队员之间的适配器,负责协调教练和队员之间的交流。原创 2024-11-26 10:22:32 · 967 阅读 · 0 评论 -
设计模式与足球(一)
如果我要一套完整的意大利国家队足球装备(除球鞋,这个貌似没有统一):包括球衣、球裤、球袜,只需跟某专卖店销售人员说一下(想象,想象......):我要一套意大利队的足球装备,大小为XL,返回给你的是一套经典的蓝色意大利国家队队服,包括蓝色的足球袜;:近年来大型足球比赛(世界杯和欧洲杯)的指定用球都是阿迪达斯的(据说是签了合同的),当然Adidas足球是由Adidas公司生产的,除此之外,Nike公司也生产Nike足球,KAPPA(背靠背)公司也生产背靠背足球,足球生产商是工厂,足球是产品。原创 2024-11-26 10:21:30 · 439 阅读 · 0 评论 -
操作复杂对象结构——访问者模式(四)
由于访问者模式的使用条件较为苛刻,本身结构也较为复杂,因此在实际应用中使用频率不是特别高。当系统中存在一个较为复杂的对象结构,且不同访问者对其所采取的操作也不相同时,可以考虑使用访问者模式进行设计。在XML文档解析、编译器的设计、复杂集合对象的处理等领域访问者模式得到了一定的应用。1.主要优点访问者模式的主要优点如下:(1) 增加新的访问操作很方便。使用访问者模式,增加新的访问操作就意味着增加一个新的具体访问者类,实现简单,无须修改源代码,符合“开闭原则”。原创 2024-11-25 15:58:33 · 657 阅读 · 0 评论 -
操作复杂对象结构——访问者模式(三)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-25 15:57:55 · 708 阅读 · 0 评论 -
操作复杂对象结构——访问者模式(二)
访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。在使用访问者模式时,被访问元素通常不是单独存在的,它们存储在一个集合中,这个集合被称为“对象结构”,访问者通过遍历对象结构实现对其中存储的元素的逐个操作。原创 2024-11-25 15:57:06 · 1011 阅读 · 0 评论 -
操作复杂对象结构——访问者模式(一)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!想必大家都去过医院,虽然没有人喜欢去医院(爱岗敬业的医务工作人员除外)。原创 2024-11-25 15:56:22 · 659 阅读 · 0 评论 -
模板方法模式深度解析(三)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-25 07:40:28 · 739 阅读 · 0 评论 -
模板方法模式深度解析(二)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-25 07:39:38 · 975 阅读 · 0 评论 -
模板方法模式深度解析(一)
在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是:点单 --> 吃东西 --> 买单。在这三个步骤中,点单和买单大同小异,最大的区别在于第二步——吃什么?图1 请客吃饭示意图在软件开发中,有时也会遇到类似的情况,某个方法的实现需要多个步骤(类似“请客”),其中有些步骤是固定的(类似“点单”和“买单”),而有些步骤并不固定,存在可变性(类似“吃东西”)。原创 2024-11-25 07:38:50 · 1158 阅读 · 0 评论 -
算法的封装与切换——策略模式(四)
策略模式用于算法的自由切换和扩展,它是应用较为广泛的设计模式之一。策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法来解决某一问题,同时可以方便地更换算法或者增加新的算法。只要涉及到算法的封装、复用和切换都可以考虑使用策略模式。1. 主要优点策略模式的主要优点如下:(1) 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。(2) 策略模式提供了管理相关的算法族的办法。原创 2024-11-25 07:38:00 · 777 阅读 · 0 评论 -
算法的封装与切换——策略模式(三)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-25 07:36:37 · 465 阅读 · 0 评论 -
算法的封装与切换——策略模式(二)
在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封装了一种实现算法,使用算法的环境类针对抽象策略类进行编程,符合“依赖倒转原则”。原创 2024-11-25 07:35:25 · 1060 阅读 · 0 评论 -
算法的封装与切换——策略模式(一)
这就是策略模式所要解决的问题,下面将进入策略模式的学习。原创 2024-11-25 07:34:12 · 727 阅读 · 0 评论 -
处理对象的多种状态及其相互转换——状态模式(六)
状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流和游戏开发中状态模式都得到了广泛的应用,例如公文状态的转换、游戏中角色的升级等。1. 主要优点状态模式的主要优点如下:(1)封装了状态的转换规则,在状态模式中可以将状态的转换代码封装在环境类或者具体状态类中,可以对状态转换代码进行集中管理,而不是分散在一个个业务方法中。(2)原创 2024-11-24 16:06:39 · 925 阅读 · 0 评论 -
处理对象的多种状态及其相互转换——状态模式(五)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-24 16:06:06 · 473 阅读 · 0 评论 -
处理对象的多种状态及其相互转换——状态模式(四)
下面通过一个简单实例来说明如何实现共享状态:如果某系统要求两个开关对象要么都处于开的状态,要么都处于关的状态,在使用时它们的状态必须保持一致,开关可以由开转换到关,也可以由关转换到开。原创 2024-11-24 16:05:31 · 468 阅读 · 0 评论 -
处理对象的多种状态及其相互转换——状态模式(三)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-24 16:04:52 · 624 阅读 · 0 评论 -
处理对象的多种状态及其相互转换——状态模式(二)
状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。原创 2024-11-24 16:04:01 · 1110 阅读 · 0 评论 -
处理对象的多种状态及其相互转换——状态模式(一)
在图2中,NormalState表示正常状态,OverdraftState表示透支状态,RestrictedState表示受限状态,在这三种状态下账户对象拥有不同的行为,方法deposit()用于存款,withdraw()用于取款,computeInterest()用于计算利息,stateCheck()用于在每一次执行存款和取款操作后根据余额来判断是否要进行状态转换并实现状态转换,相同的方法在不同的状态中可能会有不同的实现。(2) 拥有一个较为复杂的stateCheck()方法,包含大量的if…原创 2024-11-24 12:10:32 · 744 阅读 · 0 评论 -
对象间的联动——观察者模式(六)
观察者模式是一种使用频率非常高的设计模式,无论是移动应用、Web应用或者桌面应用,观察者模式几乎无处不在,它为实现对象之间的联动提供了一套完整的解决方案,凡是涉及到一对一或者一对多的对象交互场景都可以使用观察者模式。观察者模式广泛应用于各种编程语言的GUI事件处理的实现,在基于事件的XML解析技术(如SAX2)以及Web事件处理中也都使用了观察者模式。原创 2024-11-24 12:05:31 · 967 阅读 · 0 评论 -
对象间的联动——观察者模式(五)
图22-6中相关类说明如下:(1) LoginEvent是事件类,它用于封装与事件有关的信息,它不是观察者模式的一部分,但是它可以在目标对象和观察者对象之间传递数据,在AWT事件模型中,所有的自定义事件类都是java.util.EventObject的子类。原创 2024-11-24 12:04:54 · 930 阅读 · 0 评论 -
对象间的联动——观察者模式(四)
通过使用JDK中的Observer接口和Observable类,可以更加方便地在Java语言中应用观察者模式。原创 2024-11-24 12:04:16 · 897 阅读 · 0 评论 -
对象间的联动——观察者模式(三)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!原创 2024-11-24 12:02:56 · 490 阅读 · 0 评论 -
对象间的联动——观察者模式(二)
观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。原创 2024-11-24 12:00:55 · 1128 阅读 · 0 评论 -
对象间的联动——观察者模式(一)
红灯停,绿灯行”,在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通。当红灯亮起,来往的汽车将停止;而绿灯亮起,汽车可以继续前行。在这个过程中,交通信号灯是汽车(更准确地说应该是汽车驾驶员)的观察目标,而汽车是观察者。随着交通信号灯的变化,汽车的行为也将随之而变化,一盏交通信号灯可以指挥多辆汽车。原创 2024-11-24 11:59:14 · 1010 阅读 · 0 评论 -
撤销功能的实现——备忘录模式(五)
备忘录模式在很多软件的使用过程中普遍存在,但是在应用软件开发中,它的使用频率并不太高,因为现在很多基于窗体和浏览器的应用软件并没有提供撤销操作。如果需要为软件提供撤销功能,备忘录模式无疑是一种很好的解决方案。在一些字处理软件、图像编辑软件、数据库管理系统等软件中备忘录模式都得到了很好的应用。1.主要优点备忘录模式的主要优点如下:(1)它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。原创 2024-10-24 16:13:17 · 401 阅读 · 0 评论 -
撤销功能的实现——备忘录模式(四)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-10-24 16:10:53 · 892 阅读 · 0 评论 -
撤销功能的实现——备忘录模式(三)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-10-24 16:09:18 · 485 阅读 · 0 评论 -
撤销功能的实现——备忘录模式(二)
备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,当前很多软件都提供了撤销(Undo)操作,其中就使用了备忘录模式。备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。原创 2024-10-24 16:07:36 · 832 阅读 · 0 评论 -
撤销功能的实现——备忘录模式(一)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!每个人都有过后悔的时候,但人生并无后悔药,有些错误一旦发生就无法再挽回,有些人一旦错过就不会再回来,有些话一旦说出口就不可能再收回,这就是人生。为了不后悔,凡事我们都需要三思而后行。说了这么多,大家可能已经晕了,不是在学设计模式吗?原创 2024-10-24 16:05:57 · 124 阅读 · 0 评论 -
协调多个对象之间的交互——中介者模式(五)
中介者模式将一个网状的系统结构变成一个以中介者对象为中心的星形结构,在这个星型结构中,使用中介者对象与其他对象的一对多关系来取代原有对象之间的多对多关系。中介者模式在事件驱动类软件中应用较为广泛,特别是基于GUI(Graphical User Interface,图形用户界面)的应用软件,此外,在类与类之间存在错综复杂的关联关系的系统中,中介者模式都能得到较好的应用。1. 主要优点中介者模式的主要优点如下:(1) 中介者模式简化了对象之间的交互。原创 2024-10-24 08:30:36 · 829 阅读 · 0 评论 -
协调多个对象之间的交互——中介者模式(四)
在客户端中只需要修改少许代码(如果引入配置文件的话有时可以不修改任何代码)就可以实现中介者的更换。原创 2024-10-24 08:29:01 · 632 阅读 · 0 评论 -
协调多个对象之间的交互——中介者模式(三)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-10-24 08:27:30 · 389 阅读 · 0 评论
分享