![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 69
隐居的遮天恶鬼
你不应该拘泥于任何特定的技术,而应该拥有足够广泛的背景和经验基础,以便在特定的情况下选择合适的解决方案。你的背景来自对计算机科学基本原理的理解,而你的经验来自广泛的实际项目。理论结合实践才会让你变得强大。
展开
-
【HeadFirst 设计模式】命令模式的C++实现
A公司想要生产一款万能遥控器:使用本公司遥控器,只需要设置好需要被控制的设备,比如电视,空调,电灯等,便可以实现遥控,从此摆脱找不到遥控器的情况!其他电器类的代码和实现已经相应的电器公司提供,你的任务是将这些代码融合进遥控器中,以实现遥控器的功能。原创 2024-08-15 21:18:52 · 450 阅读 · 0 评论 -
【HeadFirst 设计模式】单例模式的C++实现
在很多时候,我们期望代码在运行过程中只实例化一个实例,听起来似乎很简单,但是你不应该想着仅靠个人技术或者团队内的约定去完成这件事。因为这件事从本质上讲是类的设计者的责任,而不能依靠使用这个类的人靠个人技艺去保证单例。单例模式是有发展历程的。最开始的一段时间,当人们设计出单例模式之后,这一模式便被广泛的使用,但随后有一些资深的计算机科学家论证了当时的编程手段实际上无法保证单例,再后来一些编程语言甚至增加了一些关键字去弥补这个漏洞。原创 2024-08-15 20:36:56 · 388 阅读 · 0 评论 -
【HeadFirst 设计模式】工厂模式的C++实现
你发现你所有的竞争者都已经在他们的菜单中加入了一些流行风味的披萨,很明显,你必须要赶上他们,所以你也要将这些类型的披萨加进你的菜单中,而最近Greek Pizza卖的不好,所以你决定将它从菜单中去掉。既然我们想要根据不同的披萨店定制个性化的披萨,那就简单干脆一些,写出一个工厂父类,然后实现好几个具体工厂继承它,这样在创建的时候我们便能够动态的选择不同的工厂去制作披萨。在这个过程中,你发现加盟店的确是采用你的工厂创建披萨,但是其他部分,却开始采用他们自己根据当地人的口味做的一些改良:烘焙手法有些差异等等。原创 2024-08-14 23:26:51 · 650 阅读 · 0 评论 -
【HeadFirst 设计模式】装饰者模式的C++实现
购买咖啡时,可以要求在其中加入各种调料,例如:蒸奶(Steamed Milk)、豆浆(Soy)、摩卡(Mocha,也就是巧克力风味)或覆盖奶泡。星巴克会根据所加入的调料收取不同的费用。比如我们在基类中加上实例变量,这些布尔值代表是否加上该调料(牛奶,豆浆,摩卡,奶泡。因为扩张速度实在太快了,他们准备更新订单系统,以合乎他们的饮料供应要求。他们原先的类设计是这样的。我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为?这样的设计具有弹性,可以应对改变,可以接收新的功能来应对改变的需求?原创 2024-08-14 20:24:07 · 448 阅读 · 0 评论 -
【HeadFirst 设计模式】观察者模式的C++实现
贵公司获选为我公司建立下一代Internet气象观测站!该气象站必须建立在我们专利申请中的WeatherData对象上,由WeatherData对象负责追踪目前的天气状况 (温度、 湿度、气压)。我们希望贵公司能建立一个应用,有三种布告板,分别显示目前的状况、气象统计及简单的预报。当WeatherObject对象获得最新的测量数据时, 三种布告板 必须实时更新。原创 2024-08-14 00:14:08 · 262 阅读 · 0 评论 -
【HeadFirst 设计模式】策略模式的C++实现
J o e 上班的公司做了一套相当成功的模拟鸭子游戏:SimUDuck。游戏中会出现各种鸭子,一边游泳戏水,一边呱呱叫。此系统的内部设计使用了标准的OO技术,设计了一个鸭子父类,并让各种鸭子继承此父类。现在,需求发生了变化,需要添加会飞并且会叫的鸭子,怎么做合适?原创 2024-08-08 21:30:37 · 627 阅读 · 0 评论 -
【HeadFirst 设计模式】C++案例笔记
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。上面这段话可以说是设计模式为什么会被总结归纳并值得学习的原因——“复用前人的经验”。是的,它就像一本传世已久的武功秘籍,你在软件开发过程中遇到的大部分问题,其实你的先辈都曾遇到过,并且已经做了归纳,你只需学习这些经验并实践之就能解决你眼前的困难。当然,你也可能选择无视它,自己尝试去解决,但最终的效果大概率差强人意,并且在此过程中也浪费了大量时间。原创 2024-08-08 20:51:39 · 325 阅读 · 0 评论 -
【设计模式】单例模式的前世今生
在软件系统中,经常有一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性以及良好的效率。单例模式是一种设计模式,其核心目的是确保某个类在系统中只有一个实例,并提供一个全局访问点来访问这个实例。“确保某个类在系统中只有一个实例”——这个目的听起来似乎很简单,不要觉得荒谬,某些特定的情况下,我们的系统中确实只需要某个类的一个实例就可以了,这样既能满足实际使用场景,又能减少内存开销,避免资源的多重占用,提升性能。原创 2024-05-06 18:53:06 · 1007 阅读 · 0 评论 -
【设计模式】Head First 设计模式——构建器模式 C++实现
Builder 模式主要用于“分步骤构建一个复杂的对象”。在这其中“ 分步骤 ”是一个稳定的算法,而复杂对象的各个部分则经常变化变化点在哪里,封装就在哪里 — Builder 模式主要在于应对“复杂对象各个部分”的频繁需求变动。其缺点在于难以应对“分步骤构建算法”的需求变动在Builder 模式中,要注意不同语言中构造器内调用抽象方法的差别。原创 2023-09-02 17:27:54 · 1021 阅读 · 0 评论 -
【设计模式】Head First 设计模式——桥模式 C++实现
设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。原创 2023-08-30 16:55:32 · 986 阅读 · 0 评论 -
【设计模式】面向对象设计八大原则
(1)依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。抽象(稳定)不应该依赖于变化),实现细节应该依赖于抽象(稳定)。(2)开放封闭原则(OCP)对扩展开放,对更改封闭。类模块应该是可扩展的,但是不可修改。(3)单一职责原则(SRP)一个类应该仅有一个引起它变化的原因。变化的方向隐含着类的责任。(4)Liskov 替换原则(LSP)子类必须能够替换它们的基类(IS-A)。继承表达类型抽象。(5)接口隔离原则(ISP)原创 2023-08-30 16:01:37 · 1189 阅读 · 0 评论