设计模式
文章平均质量分 73
使用C++介绍工作中常用的设计模式
Snowball Snowball
这个作者很懒,什么都没留下…
展开
-
设计模式专栏说明
(设计模式:可复用面向对象软件的基础)或者Head First 设计模式。该专栏代码主要是记录自己学习的一些设计模式,强烈推荐去看两本书。该专栏的很多代码示例参考自Head First 设计模式。原创 2024-06-30 11:24:31 · 123 阅读 · 0 评论 -
观察者模式(Observer Pattern)
观察者模式通过定义一对多的依赖关系,使得多个观察者可以监听一个主题对象,当主题对象状态发生变化时,自动通知所有观察者进行更新。它将观察者与被观察者解耦,提供了一个灵活的机制来实现对象间的通信,适用于需要实时更新的场景。原创 2024-06-30 10:45:04 · 364 阅读 · 0 评论 -
代理模式(Proxy Pattern)
代理模式通过为目标对象提供一个代理对象,可以在不修改目标对象的情况下,添加额外的功能,例如控制访问、延迟加载、日志记录等。代理模式增强了系统的灵活性和可扩展性,适用于需要控制对象访问或添加额外功能的场景。原创 2024-06-29 23:16:54 · 660 阅读 · 0 评论 -
状态模式(State Pattern)
通过状态模式,我们可以清晰地定义红绿灯的状态和状态转换逻辑,使得代码结构更加清晰和易于维护。每个状态的行为被封装在独立的状态类中,当红绿灯的状态发生变化时,只需要切换到相应的状态对象,而不需要在上下文类中处理复杂的状态转换逻辑。状态模式很好地实现了对象行为的动态改变,适用于状态较多且需要频繁切换的场景。通过将状态转换逻辑放在上下文类中,状态类更加独立,职责更加单一。这种设计使得状态类只关注各自的行为,而状态转换的复杂性由上下文类管理,增强了系统的灵活性和可维护性。原创 2024-06-29 23:02:02 · 938 阅读 · 0 评论 -
迭代器模式(Iterator Pattern)
迭代器模式通过提供一个统一的接口来遍历集合对象中的元素,使得客户端代码可以一致地遍历不同类型的集合对象,而不需要了解其内部实现细节。这种模式特别适用于需要访问一个聚合对象的内容而又不希望暴露其内部表示的场景。通过迭代器模式,可以更加灵活和方便地操作和遍历集合对象。虽然直接使用vector遍历在简单情况下是可行的,但在复杂数据结构和需要更多灵活性和扩展性的情况下,迭代器模式提供了更好的解决方案。原创 2024-06-29 20:59:35 · 1139 阅读 · 0 评论 -
组合模式(Composite Pattern)
组合模式通过将对象组合成树形结构,能够一致地对待单个对象和组合对象,适用于需要表示“部分-整体”关系的场景。通过这种模式,可以轻松地扩展系统而不会影响客户端代码,同时保持代码的清晰和简洁。原创 2024-06-29 20:57:41 · 305 阅读 · 0 评论 -
组合模式(Composite Pattern)
组合模式通过将对象组合成树形结构,能够一致地对待单个对象和组合对象,适用于需要表示“部分-整体”关系的场景。通过这种模式,可以轻松地扩展系统而不会影响客户端代码,同时保持代码的清晰和简洁。原创 2024-06-29 20:50:20 · 328 阅读 · 0 评论 -
模板方法模式(Template Method Pattern)
模板方法模式通过在父类中定义算法的骨架,并将具体的实现步骤延迟到子类中,实现了代码的复用和算法的扩展。它适用于有固定算法结构,但其中某些步骤需要由子类具体实现的情况。模板方法模式使得算法的整体结构保持不变,而具体的实现细节可以灵活变化。原创 2024-06-29 20:31:20 · 424 阅读 · 0 评论 -
命令模式(Command)
编译并运行这段代码,你将看到命令的执行、撤销和重做日志输出。通过使用命令模式,我们可以方便地管理和记录命令的执行历史,为实现复杂的功能提供了良好的扩展性。使用命令模式的设计模式可以帮助我们记录命令日志,并且可以方便地执行、撤销和重做命令。以下是一个简单的C++示例,展示了如何实现命令模式并记录命令日志。原创 2024-06-29 20:06:35 · 201 阅读 · 0 评论 -
外观模式(Facade Pattern)
外观模式通过提供一个简化的接口,隐藏了子系统的复杂性,减少了客户端与子系统之间的耦合度,使得系统更容易使用和维护。它特别适用于需要与多个子系统进行交互的复杂系统,通过外观模式,可以将这些复杂的交互封装起来,使得客户端代码更加简洁和清晰。原创 2024-06-29 20:25:32 · 328 阅读 · 0 评论