结构型模式
文章平均质量分 94
结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。
zwj9367
树冠、微风、肩头的暴雨
展开
-
代理模式(Proxy)
代理是一种结构型设计模式,让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。举个例子:有这样一个消耗大量系统资源的巨型对象, 你只是偶尔需要使用它,并非总是需要。你可以实现延迟初始化:在实际有需要时再创建该对象。对象的所有客户端都要执行延迟初始代码。不幸的是,这很可能会带来很多重复代码。在理想情况下,我们希望将代码直接放入对象的类中,但这并非总是能实现:比如类可能是第三方封闭库的一部分。原创 2023-11-07 18:09:29 · 34 阅读 · 0 评论 -
享元模式(Flyweight)
享元是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。假如你希望在长时间工作后放松一下,所以开发了一款简单的游戏:玩家们在地图上移动并相互射击。你决定实现一个真实的粒子系统,并将其作为游戏的特色。大量的子弹、导弹和爆炸弹片会在整个地图上穿行,为玩家提供紧张刺激的游戏体验。开发完成后,你推送提交了最新版本的程序,并在编译游戏后将其发送给了一个朋友进行测试。原创 2023-11-07 15:49:31 · 26 阅读 · 0 评论 -
外观模式(Facade)
外观是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个简单的接口。假设你必须在代码中使用某个复杂的库或框架中的众多对象。正常情况下,你需要负责所有对象的初始化工作、管理其依赖关系并按正确的顺序执行方法等。最终,程序中类的业务逻辑将与第三方类的实现细节紧密耦合,使得理解和维护代码的工作很难进行。原创 2023-11-02 17:41:30 · 27 阅读 · 0 评论 -
装饰模式(Decorator)
装饰是一种结构型设计模式,允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。假设你正在开发一个提供通知功能的库,其他程序可使用它向用户发送关于重要事件的通知。库的最初版本基于通知器Notifier 类,其中只有很少的几个成员变量,一个构造函数和一个send 发送方法。该方法可以接收来自客户端的消息参数,并将该消息发送给一系列的邮箱,邮箱列表则是通过构造函数传递给通知器的。作为客户端的第三方程序仅会创建和配置通知器对象一次,然后在有重要事件发生时对其进行调用。原创 2023-10-31 18:11:09 · 38 阅读 · 1 评论 -
组合模式(Composite)
组合是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。如果应用的核心模型能用树状结构表示,在应用中使用组合模式才有价值。例如你有两类对象:产品和盒子。一个盒子中可以包含多个产品或者几个较小的盒子。这些小盒子中同样可以包含一些产品或者更小的盒子。假设你希望在这些类的基础上开发一个订购系统。订单中可以包含无包装的简单产品,也可以包含装满产品的盒子。此时你会如何计算每张订单的总价格呢?原创 2023-10-30 11:00:30 · 33 阅读 · 0 评论 -
桥接模式(Bridge)
假如你有一个几何形状(Shape)类, 从它能扩展出两个子类: 圆形(Circle)和方形(Square)。你希望对这样的类层次结构进行扩展以使其包含颜色, 所以你打算创建名为红色(Red)和蓝色(Blue)的形状子类。但是,由于你已有两个子类,所以总共需要创建四个类才能覆盖所有组合,例如蓝色圆形(BlueCircle)和红色方形(RedSquare)。在层次结构中新增形状和颜色将导致代码复杂程度指数增长。例如添加三角形状,你需要新增两个子类,也就是每种颜色一个;原创 2023-10-27 10:57:09 · 40 阅读 · 1 评论 -
适配器模式(Adapter)
假如你正在开发一款股票市场监测程序,它会从不同来源下载 XML 格式的股票数据,然后向用户呈现出美观的图表。在开发过程中, 你决定在程序中整合一个第三方智能分析函数库。但是遇到了一个问题, 那就是分析函数库只兼容JSON 格式的数据。你可以修改程序库来支持XML。但是,这可能需要修改部分依赖该程序库的现有代码。甚至还有更糟糕的情况,你可能根本没有程序库的源代码,从而无法对其进行修改。原创 2023-10-26 10:33:00 · 27 阅读 · 0 评论