
设计模式
文章平均质量分 92
设计模式
凌桓丶
现腾讯边缘存储研发工程师,前字节跳动流式计算研发工程师、优快云博客专家。
展开
-
趣谈设计模式 | 桥接模式(Bridge):将抽象与实现分离
文章目录案例:跨平台程序设计桥接模式总结完整代码与文档案例:跨平台程序设计小明所在的公司正在研发一个智能遥控APP,可以通过将家电的命令配对到APP上,通过APP我们就能够远程的启动家中的家电,并让其执行任务。如果我们直接让遥控器来要求家电做出某些命令,由于家电的品牌、种类不同,其功能的接口以及实现也各不相同,为我们的设计带来了巨大的挑战。由于不同的产品的命令不一样,接口也不一样,如果让控制器全权负责家电命令的请求、下达、执行,这就要求控制器必须要清楚家电的所有细节,并且需要针对对象编程,一旦我原创 2020-12-13 17:09:41 · 2115 阅读 · 0 评论 -
趣谈设计模式 | 职责链模式(ChainOfResposibility):请求的转发处理
文章目录案例:自动驾驶飞机外观模式总结完整代码与文档案例:自动驾驶飞机随着自动驾驶汽车的大卖,特X拉开始把目标转向飞行领域,打算开发出一款能够完全自动行驶的飞机,系统初步的设计如下我们将所有系统的控制封装为方法提供给客户客户只需要按照上面的步骤启动即可但是,这样的设计存在着严重的问题存在着大量的方法,用户存在学习成本各个系统之间存在强耦合关系,例如我们不可能在没有能源的情况下启动导航和发动引擎当需要关闭系统时,又要按照另一种关闭顺序进行关闭当系统更新换代时,用户又需要学习另一套操原创 2020-12-08 16:26:28 · 337 阅读 · 0 评论 -
趣谈设计模式 | 模板方法模式(Template Method):封装不变部分,扩展可变部分
文章目录案例:房屋建造模板方法模式模板方法模式与策略模式总结完整代码与文档这个设计模式过于简单,所以不是很好举例…案例:房屋建造假设我们是建筑公司中的规划者,负责设定建筑方案,在初期我们主要承接两种装修方案,分别是下图的中式装修与西式装修代码表示如下class WesternStyle{public: void Foundation() { std::cout << "打地基" << std::endl; } vo原创 2020-11-10 21:58:55 · 479 阅读 · 0 评论 -
趣谈设计模式 | 适配器模式(Adapter):如何让现存对象适用于新的环境?
文章目录案例:插头转换器适配器模式对象适配器类适配器总结完整代码与文档案例:插头转换器适配器模式对象适配器类适配器总结完整代码与文档原创 2020-11-07 18:52:13 · 731 阅读 · 0 评论 -
趣谈设计模式 | 外观模式(Facade):为子系统提供高粒度接口
文章目录由于外观模式思路很简单,所以博客的篇幅也会相对之间的短很多。原创 2020-11-06 14:30:03 · 698 阅读 · 0 评论 -
趣谈设计模式 | 命令模式(Command):将命令封装为对象
文章目录案例:智能遥控命令模式应用场景队列请求日志系统总结完整代码与文档命令模式的应用场景较少,且不易理解,因此我也不好举例,所以下面的描述可能会存在一些问题,请见谅案例:智能遥控小明所在的公司正在研发一个智能遥控APP,可以通过将家电的命令配对到APP上,通过APP我们就能够远程的启动家中的家电,并让其执行任务。如果我们直接让遥控器来要求家电做出某些命令,由于家电的品牌、种类不同,其功能的接口以及实现也各不相同,为我们的设计带来了巨大的挑战。由于不同的产品的命令不一样,接口也不一样,如果让控原创 2020-11-05 22:10:08 · 687 阅读 · 0 评论 -
趣谈设计模式 | 代理模式(Proxy):利用代理来控制对象的访问
文章目录案例:房屋中介代理模式代理模式的应用远程代理虚拟代理反向代理智能引用代理写时拷贝代理代理模式与装饰器模式总结完整代码与文档由于代理模式相较于前面的其他设计模式来说更加简单,容易理解,所以为了保证内容不会太少,我除了介绍代理模式外还会重点介绍远程代理和虚拟代理,以及简单提及其他的一些代理模式的应用案例:房屋中介假设小明准备去外地实习,于是他需要租一间房来居住。但是由于身在外地,人生地不熟的他根本没办法和正在出租房屋的房东联系,于是他想到了一个好办法,找到具有人脉的房产中介来代替他租房有原创 2020-11-03 16:59:58 · 1463 阅读 · 0 评论 -
趣谈设计模式 | 状态模式(State):如何实现游戏中的状态切换?
文章目录案例:马里奥积分竞赛有限状态机分支逻辑法查表法状态模式孪生兄弟:状态模式与策略模式总结完整代码与文档案例:马里奥积分竞赛喜欢马里奥的小伙伴们都应该知道,前不久马里奥为了庆祝35周年,推出了一款以多人对抗大逃杀为核心的超级马里奥兄弟35此处仅为举例,并无此开发计划由于新颖的游戏模式带来了巨大的热度,于是任天堂决定趁热打铁,推出一款马里奥竞技游戏,在一定时间内获得积分最多的玩家将获得胜利。考虑到游戏并非正传,于是任天堂将游戏的开发工作外包给了小明所在的游戏公司来进行制作。游戏的核心玩法就是原创 2020-11-02 13:17:14 · 3585 阅读 · 7 评论 -
趣谈设计模式 | 装饰器模式(Decorator):用装饰来动态扩展功能
文章目录案例:奶茶店装饰器模式总结完整代码与文档案例:奶茶店小明经营着一家奶茶店,由于疫情导致线下销量不佳,于是他准备拓展网上订餐业务,针对下面的菜单设计了一套订餐系统小明初步的设计如下,使用一个抽象类饮料,并让所有类型的饮品继承于它,并且里面包含返回描述信息与价钱的方法,代码如下class Beverage{public: virtual ~Beverage() = default; virtual double cost() = 0; virtual std:原创 2020-11-01 14:23:23 · 1634 阅读 · 0 评论 -
趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?
文章目录案例:指挥官AI策略模式配合工厂模式总结完整代码与文档案例:指挥官AI案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意假设我们开发了一款类似全面战争的即时战略游戏,为了能够增加玩家的对抗体验,我们决定设计一个指挥官AI,与以往的无脑人机不同,指挥官会根据战况以及玩家的操作,来指定克制玩家的计策。例如当玩家派出骑兵时,指挥官就会派出枪兵,当玩家退回城中防守时,指挥官就会派出破城槌来攻城。于是我们初步的设计如下,我们使用If-else这样的条件判断,根据玩家的不同行为来做出不同的操作原创 2020-10-31 15:06:59 · 1164 阅读 · 0 评论 -
趣谈设计模式 | 工厂模式(Factory):利用工厂来创建对象
文章目录案例:外设店铺简单工厂工厂方法抽象工厂总结要点三类工厂模式的特点三种工厂模式的适用场景完整代码与文档工厂模式模式是创建型模式中较为常用的一个,它并不是一个模式,而是三种功能相近的设计模式的统称,它们分别是简单工厂模式、工厂方法模式、抽象工厂模式,下面我将结合案例来一一讲解它们的特点案例:外设店铺假设我们经营着一家外设店铺,我们主要售卖雷蛇和罗技这两个型号的鼠标,为了方便用户购买,我们设计了一个网上购物的平台,用户在网上下单后我们会去根据需求来生成鼠标,再经过测试、包装、注册信息后,就将合格的原创 2020-10-30 10:01:49 · 1314 阅读 · 3 评论 -
趣谈设计模式 | 观察者模式(Observer) :消息的发布与订阅
文章目录案例:文章推送观察者模式观察者模式的运作流程观察者模式解决的问题观察者模式大显身手总结要点应用场景生产者-消费者模型 VS 观察者模式完整代码案例:文章推送为了方便举例,我提出以下场景。假设我是一个科幻小说爱好者,我维护着一个叫做ScienceFictionPusher的公众号,定期向豆瓣、知乎等平台推送那些我觉得有趣的科幻小说,于是为了方便管理,我的推送程序是这样的逻辑class ScienceFictionPusher {public: //推送内容 void newP原创 2020-10-29 11:06:21 · 1681 阅读 · 5 评论 -
趣谈设计模式 | 单例模式(Singleton) :独一无二的对象
文章目录单例模式饿汉模式懒汉模式懒汉和饿汉的区别单例模式一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。单例模式有两种常见的实现方法,分别是懒汉模式和饿汉模式。饿汉模式作为一个饿汉,自然不会等到饥饿的时候才去做饭,原创 2020-07-26 23:41:13 · 750 阅读 · 0 评论