标签: 设计模式
编程

设计模式之工厂方法(Factory Method)

300 2024-01-31 03:40:00

工厂方法是一种创建型设计模式,它为在超类中创建对象提供了一个接口,但允许子类更改将要创建的对象的类型。问题描述想象一下,你正在创建一个物流管理应用。你的应用程序的第一个版本只能处理卡车运输,所以你的大部分代码都在卡车类(Truck)中。过了一段时间,你的应用程序变得非常受欢迎。每天,您都会收到数十个来自海运公司的请求,要求将海运物流纳入...

详情...
编程

设计模式之原型(Prototype)模式

245 2024-01-30 01:12:00

又称: 克隆模式(Clone)。原型模式(Prototype)是创建型设计模式,它允许克隆对象,甚至是复杂的对象,而不必耦合到它们的特定类。所有原型类都应该有一个公共接口,即使对象的具体类是未知的,也可以复制对象。原型对象可以生成完整的副本,因为同一类的对象可以访问彼此的私有字段。

详情...
编程

设计模式之代理(Proxy)模式

275 2024-01-29 01:12:00

代理模式(Proxy)是一种结构型设计模式,允许你提供为另一个对象提供替代或占位符。代理控制对原始对象的访问,允许你在请求到达原始对象之前或之后执行某些操作。问题描述为什么要控制对对象的访问?这里有一个例子:你有一个巨大的对象,它消耗了大量的系统资源。你有时需要它,但并不总是如此。你可以实现惰性初始化:只在实际需要时创建此对象。对象的所有客户端都需要执行...

详情...
编程

设计模式之桥接(Bridge)模式

271 2024-01-28 02:33:00

意图桥接模式(Bridge)是一种结构型设计模式,可以将一个大型类或一组密切相关的类拆分为两个独立的层次结构——抽象和实现——它们可以相互独立地开发。问题描述抽象?实现?听起来很吓人?请保持冷静,我们来思考一个简单的示例。假设你有一个几何形状 shape 类,它有一对子类:Circle 和 Square。你想扩展这个类层次结构以合并颜色,所以你计划创建 Re...

详情...
编程

设计模式之适配器(Adapter)模式

271 2024-01-27 17:42:00

又名 Wrapper。Adapter 是一种结构型设计模式,他允许有着不兼容接口的对象进行合作。问题描述假设你创建了一个股票市场监测应用。该应用以 XML 格式从多个源下载股票数据,然后为用户显示了优美的图表。在某个时刻,你决定整合一个智能的第三方分析库,改进应用。但有一个问题:分析库只适用于 JSON 格式的数据。您可以修改库以使用 XML。但是,这可能...

详情...
编程

设计模式之观察者(Observer)模式

282 2024-01-26 20:37:00

又名: 事件订阅者(Event-Subscriber), 监听者(Listener)。观察者模式(Observer)是一种行为设计模式,允许你定义一个订阅机制,用以向多个对象通知他们正在观察的对象发生的任何事件。问题描述假设你有两类对象: Customer 和 Store。顾客(customer)对特定品牌的产品非常感兴趣(比如 iphone 的...

详情...
编程

设计模式之命令(Command)模式

280 2024-01-25 15:11:00

命令模式(Command)是一种行为设计模式,它将请求转换成包含所有请求信息的独立对象。这个转换允许你将请求转换成方法参数,将请求执行延迟或者排入队列,并支持可撤消的操作。问题描述:想象一下,你正在开发一个新的文本编辑器应用程序。当前的任务是创建一个工具栏,其中包含一组用于编辑器各种操作的按钮。你创...

详情...
编程

Laravel 设计模式之装饰器模式

292 2024-01-02 17:34:00

在所有讨论的设计模式中,“四人”原著中的装饰器设计模式最吸引我。它的简单而强大(即广泛的使用/适用性)使它成为我个人的最爱。然而,这种简单性和实用性经常被忽视,取而代之的是,焦点被转移到了“哦,过度工程化”或“过早的抽象是万恶之源!”(因为有一个接口在使用中)。虽然我并不是说从来都不是这样,但我认为可以公平地说,用同一把刷子对每个用例和实现进行标记是明显不公...

详情...
编程

API 设计:真实世界的情况 2

440 2023-05-25 10:31:00

在前面的文章中,我们研究了一些真实存在下的 API,对其中好的和坏的进行了特别说明。本文中,我们将继续同样的事情!› Python 的 datetime.datetime大多数经验丰富的Python爱好者在职业生涯的某个阶段都写过这样的代码:import datetime now = datetime.datetime.now() print(now)虽然没...

详情...
编程

API 设计:真实世界的情况

490 2023-05-24 10:29:00

在此前的文章中,我们已经探索了一些基本原则,不过还没开始使用新发现的技能。让我们休息一下,看看一些今天真实场景下的一些代码示例,以及我们如何对其改进。› Go的 math/big 库大部分语言都有处理超大数值的库,Go 也不例外。下面是一个操作示例:package main import ( "fmt" "math" "math/big" ...

详情...