
设计模式
文章平均质量分 94
软件架构师笔记
致力于成为优秀软件架构师并记录成长之路。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python讲解:服务定位器模式
Service 定义了具体服务的行为pass# ConcreteService 实现了Service接口,提供了具体的服务逻辑。原创 2024-12-24 20:20:22 · 1189 阅读 · 0 评论 -
Python 讲解设计模式领域事件
领域事件(Domain Events)是领域驱动设计(Domain-Driven Design, DDD)中的一个重要概念。它表示在领域模型中发生的有意义的业务事件,通常用于通知系统其他部分或外部系统某些重要的业务操作已经完成。领域事件有助于解耦系统的不同部分,提高代码的可维护性和可测试性。原创 2024-12-17 12:31:54 · 708 阅读 · 0 评论 -
Python讲解设计模式事件源
事件源(Event Sourcing)是一种设计模式,它通过记录系统状态变化的事件来替代直接更新系统的当前状态。每一个状态变化都被捕获为一个不可变的事件对象,并持久化存储。这些事件可以被用来重建系统的任意历史状态或当前状态。事件源模式的主要优势在于它提供了完整的审计追踪、简化了并发控制以及支持复杂业务逻辑的实现。此外,由于所有更改都是以事件的形式保存,因此可以更容易地进行数据分析和回滚操作。在事件源模式中,应用的状态不是直接修改的,而是通过产生事件来间接改变。每个事件代表了一个特定的变化,例如用户创建、订单原创 2024-12-17 07:45:46 · 815 阅读 · 0 评论 -
Python讲解:黑板模式
黑板模式(Blackboard Pattern)是一种设计模式,它模拟了专家系统中的协作解决问题的过程。在这个模式中,多个知识源(或专家模块)通过共享一个称为“黑板”的公共数据结构来合作解决问题。每个知识源负责处理特定类型的子问题,并将其结果更新到黑板上,供其他知识源使用。假设我们正在开发一个简单的图像识别系统,该系统能够识别图片中的物体类型。为了实现这个功能,我们可以利用黑板模式来集成不同的图像处理算法。首先,我们需要定义一个黑板类,用于存储图像数据和识别结果:步骤二:创建知识源类接下来,为每种图像处原创 2024-12-17 07:10:43 · 894 阅读 · 0 评论 -
Python 讲解设计模式规格模式
规格模式(Specification Pattern)是一种用于将业务规则或条件封装成对象的设计模式。它允许你将复杂的查询逻辑或验证规则拆分为多个独立的规格对象,然后通过组合这些规格来构建更复杂的规则。规格模式通常用于领域驱动设计(DDD)中,帮助开发者更好地管理和表达业务规则。原创 2024-12-17 06:54:13 · 715 阅读 · 0 评论 -
Python讲解设计模式管道-过滤器
首先,我们需要定义FileSource和FileSink。原创 2024-12-17 03:06:57 · 643 阅读 · 0 评论 -
Python讲解单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这种模式在需要控制资源访问、管理共享状态或配置时非常有用。唯一性:保证在整个应用程序中,某个类只有一个实例。全局访问点:提供一个全局的访问点来获取这个唯一的实例。延迟初始化:通常在第一次使用时才创建实例,以节省资源。原创 2024-12-16 08:58:03 · 1482 阅读 · 0 评论 -
探讨23种设计模式之外的现代设计模式
虽然GoF 23种设计模式为我们提供了坚实的基础,但随着软件工程领域的不断发展,我们也应该保持开放的心态,学习和应用新的设计模式。每一种模式都有其适用的场景和局限性,了解它们可以帮助我们在正确的时间做出最佳的选择,从而构建出更加健壮和高效的软件系统。PHP官网。原创 2024-12-16 08:51:01 · 960 阅读 · 0 评论 -
Python讲解:工厂方法模式
工厂方法模式是一种创建型设计模式原创 2024-12-16 08:35:11 · 774 阅读 · 0 评论 -
Python讲解:原型模式
pass。原创 2024-12-16 20:00:00 · 921 阅读 · 0 评论 -
Python讲解抽象工厂模式
首先,定义两个抽象产品类Chair和Table,它们分别表示椅子和桌子的接口。passpass然后,定义一个抽象工厂类,它定义了创建椅子和桌子的接口。passpass。原创 2024-12-16 19:30:00 · 951 阅读 · 0 评论 -
Python讲解:适配器模式
passpass。原创 2024-12-16 19:00:00 · 1208 阅读 · 0 评论 -
Python讲解桥接模式
首先,定义一个Color接口,表示颜色的实现部分。passRed和Blue。接下来,定义一个Shape类,表示抽象部分。Shape类持有一个对Color的引用,并通过该引用来调用fill方法。pass首先,定义一个Device接口,表示设备的实现部分。passpassSonyDevice和。接下来,定义一个类,表示抽象部分。类持有一个对Device的引用,并通过该引用来调用设备的操作方法。首先,定义一个接口,表示绘制方式的实现部分。passSolidLine和DashedLine。原创 2024-12-16 18:30:00 · 799 阅读 · 0 评论 -
Python讲解:建造者模式
建造者模式的主要目的是将一个复杂对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。它通过引入一个“建造者”类来逐步构建对象,而不是在一次操作中完成所有属性的设置。这样可以避免构造函数过于庞大或复杂的参数列表,同时提供更好的代码可读性和灵活性。首先,我们定义一个HTMLPage;#### 3.1.2 定义抽象建造者 接下来,我们定义一个抽象建造者类 `HTMLBuilder`,它声明了创建页面各个部分的方法:;原创 2024-12-16 18:00:00 · 849 阅读 · 0 评论 -
PHP讲解:工厂方法模式
php// Product 定义了所有具体产品类的公共接口// ConcreteProduct 实现了Product接口,提供了具体的实现逻辑?接下来,为每种形状创建创建者接口和具体创建者类,每个创建者类都实现了Creatorphp// Creator 声明了工厂方法,该方法返回一个Product类型的对象// ConcreteCreator 实现了Creator接口,并通过工厂方法创建具体的产品对象?原创 2024-12-16 13:30:00 · 894 阅读 · 0 评论 -
PHP讲解设计模式:单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式通常用于那些需要控制资源访问的场景,比如数据库连接、配置文件读取等。原创 2024-12-16 13:15:00 · 1300 阅读 · 0 评论 -
PHP讲解:抽象工厂模式
抽象工厂模式的主要目的是提供一种创建一系列相关或依赖对象的接口,而无需指定它们具体的类。通过引入抽象工厂模式,可以将对象的创建过程与使用过程分离,使得代码更加灵活和易于扩展。抽象工厂模式的核心思想是定义一个工厂接口,该接口包含多个创建方法,每个方法用于创建不同类型的对象。这样,当需要创建一组相关的对象时,可以通过实现工厂接口来创建这些对象,而不需要直接实例化具体的类。首先,定义一个抽象工厂接口,该接口包含多个创建方法,每个方法用于创建不同类型的对象。php// 抽象工厂接口。原创 2024-12-16 13:00:00 · 897 阅读 · 0 评论 -
PHP讲解设计模式:原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需重新初始化对象。这种方式可以提高性能,特别是在创建复杂对象时,因为不需要每次都执行构造函数中的初始化逻辑。原创 2024-12-16 12:45:00 · 1918 阅读 · 0 评论 -
PHP讲解:建造者模式
php// Product 包含多个组成部分的对象,通常具有较为复杂的内部结构?接下来,为每种类型的汽车创建具体的建造者类,每个建造者类都实现了Builderphp// Builder 声明了创建产品各个部分的方法,但不一定需要实现这些方法// ConcreteBuilder 实现了Builder接口,并逐步构建出完整的产品对象?php// Director 负责安排复杂的对象构建步骤,但并不参与具体的产品部件创建。原创 2024-12-16 08:30:41 · 1005 阅读 · 0 评论 -
PHP讲解:桥接模式
首先,我们需要定义一个通用的实现接口,所有具体的绘制方式都将基于这个接口:;;;;phpphp// Implementor 定义了实现类的接口,这个接口不一定与Abstraction的接口完全一致// ConcreteImplementor 实现了Implementor接口,提供了具体的实现逻辑?;;;;接下来,为每种形状创建抽象类和扩展抽象类,每个扩展抽象类都持有一个对Renderer的引用,并提供了具体的接口实现:;;;;phpphp。原创 2024-12-16 07:19:06 · 951 阅读 · 0 评论 -
PHP讲解设计模式:适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口协同工作。适配器模式通过创建一个适配器类来转换现有类的接口,使得它可以满足客户端的期望接口。这种模式非常适合用于集成第三方库或遗留代码,而无需修改它们的源代码。原创 2024-12-16 06:35:49 · 1128 阅读 · 0 评论 -
PHP讲解:装饰者模式
php// Component 定义了所有具体组件和装饰器共有的操作// ConcreteComponent 实现了Component接口,并提供了基本的行为实现?接下来,为每种格式化功能创建具体的装饰器类,每个装饰器类都扩展了Decoratorphp// Decorator 持有一个对Component对象的引用,并实现了Component接口,可以在必要时调用被装饰对象的方法// ConcreteDecorator 扩展了Decorator,并在其基础上添加了额外的行为或状态。原创 2024-12-15 07:53:46 · 908 阅读 · 0 评论 -
PHP讲解:组合模式
定义了所有具体组件和组合对象共有的操作// Leaf 实现了Component接口,并代表了树的末端节点,不能再包含其他组件?接下来,为文件夹创建具体的组合组件类,每个组合组件类都实现了Componentphp// Composite 实现了Component接口,包含了子组件列表,并提供了添加、删除子组件的方法$size = 0;if ($index!?原创 2024-12-15 07:53:30 · 888 阅读 · 0 评论 -
PHP讲解:代理模式
php// Subject 定义了所有具体主题和代理共有的操作// RealSubject 实现了Subject接口,并提供了基本的行为实现?接下来,为图片创建具体的代理类,每个代理类都实现了Subjectphp// Proxy 也实现了Subject接口,但在调用真实主题的方法之前或之后可以执行一些额外的操作?原创 2024-12-15 07:53:14 · 860 阅读 · 0 评论 -
PHP讲解设计模式:享元模式
首先,定义一个享元接口Flyweight,所有具体的享元类都实现了这个接口。享元类负责存储内在状态,并提供一个方法来接收外在状态。php// Flyweight 接口// ConcreteFlyweight 类表示具体的享元对象// UnsharedConcreteFlyweight 类表示不共享的享元对象?在这个例子中,Flyweight接口定义了operation方法,所有具体的享元类都实现了这个接口。类表示具体的享元对象,它存储了内在状态,并通过operation方法接收外在状态。原创 2024-12-15 20:15:00 · 687 阅读 · 0 评论 -
PHP讲解:责任链模式
php// Handler 定义了所有具体处理者共有的操作// ConcreteHandler 实现了Handler接口,并包含对下一个处理者的引用,以便将请求沿链传递return;原创 2024-12-15 19:45:00 · 776 阅读 · 0 评论 -
PHP讲解设计模式:命令模式
首先,定义一个Command接口,所有具体的命令类都实现了这个接口。Command接口定义了execute方法,用于执行命令。php// Command 接口// Receiver 类表示接收者,负责执行实际的操作// ConcreteCommand 类表示具体的命令,实现了 Command 接口?在这个例子中,Command接口定义了execute方法,所有具体的命令类都实现了这个接口。Receiver类表示接收者,负责执行实际的操作。类表示具体的命令,它持有一个Receiver。原创 2024-12-15 20:00:00 · 881 阅读 · 0 评论 -
PHP讲解:迭代器模式
php// Aggregate 定义了创建迭代器对象的接口// ConcreteAggregate 实现了Aggregate接口,并包含了一个或多个元素的集合?接下来,为图书列表创建具体的迭代器类,每个迭代器类都实现了Iteratorphp// Iterator 声明了遍历元素所需的操作// ConcreteIterator 实现了Iterator接口,并负责跟踪遍历的位置?原创 2024-12-15 19:30:00 · 1605 阅读 · 0 评论 -
PHP讲解:解释器模式
php// AbstractExpression 声明了所有具体表达式共有的操作// Context 包含了解释器所需的全局信息,如变量值等?原创 2024-12-15 19:00:00 · 670 阅读 · 0 评论 -
PHP讲解设计模式:中介者模式
首先,定义一个Mediator接口,所有具体的中介者类都实现了这个接口。Mediator接口定义了notify方法,用于接收同事类的通知并处理它们之间的交互。php// Mediator 接口// ConcreteMediator 类表示具体的中介者,实现了 Mediator 接口?在这个例子中,Mediator接口定义了notify方法,所有具体的中介者类都实现了这个接口。类表示具体的中介者,它持有了两个同事类Colleague1和Colleague2,并通过notify。原创 2024-12-15 13:00:00 · 718 阅读 · 0 评论 -
PHP讲解:备忘录模式
php// Originator 负责创建一个备忘录,用以记录当前时刻自身的内部状态,并可以使用备忘录来恢复内部状态// Memento 存储了Originator的一个内部状态副本,但不允许其他对象访问这些信息,以保护封装性?php// Caretaker 负责保存好备忘录,但不能对备忘录的内容进行操作或检查?原创 2024-12-15 12:45:00 · 767 阅读 · 0 评论 -
PHP讲解:观察者模式
php// Subject 定义了添加、删除和通知观察者的接口// ConcreteSubject 实现了Subject接口,并维护了一个观察者列表,在状态发生变化时通知所有注册的观察者if ($index!?接下来,为每个客户端创建具体的观察者类,每个观察者类都实现了Observerphp// Observer 定义了接收通知的方法。原创 2024-12-15 12:30:00 · 902 阅读 · 0 评论 -
PHP讲解设计模式:状态模式
首先,定义一个State接口,所有具体的状态类都实现了这个接口。State接口定义了handle方法,用于处理特定状态下的行为。php// State 接口// ConcreteStateA 类表示具体的状态 A// ConcreteStateB 类表示具体的状态 B?在这个例子中,State接口定义了handle方法,所有具体的状态类都实现了这个接口。和类分别表示具体的状态 A 和状态 B,并在handle方法中处理特定状态下的行为。当某个状态下处理完请求后,可以通过。原创 2024-12-15 12:15:00 · 639 阅读 · 0 评论 -
PHP讲解:模板方法模式
php// AbstractClass 定义了算法的框架,包括一个或多个模板方法和基本方法// 模板方法定义了算法的骨架// 基本方法由父类实现// 抽象方法由子类实现// 钩子方法,默认返回false,子类可以选择覆盖?原创 2024-12-15 12:00:00 · 685 阅读 · 0 评论 -
PHP讲解设计模式:策略模式
首先,定义一个Strategy接口,所有具体的策略类都实现了这个接口。Strategy接口定义了execute方法,用于执行特定的算法。php// Strategy 接口// ConcreteStrategyA 类表示具体的策略 A// ConcreteStrategyB 类表示具体的策略 B?在这个例子中,Strategy接口定义了execute方法,所有具体的策略类都实现了这个接口。和类分别表示具体的策略 A 和策略 B,并在execute方法中实现了特定的算法。接下来,定义一个。原创 2024-12-15 07:48:51 · 1052 阅读 · 0 评论 -
PHP讲解:访问者模式
php// Element 定义了一个接受访问者的接口// ConcreteElement 实现了Element接口,并提供一个方法来接收访问者// 其他属性和方法...// 其他属性和方法...?接下来,为每种操作创建具体的访问者类,每个访问者类都实现了Visitorphp// Visitor 声明了对不同元素进行访问的方法// ConcreteVisitor 实现了Visitor接口,并为每个具体元素类型定义了访问逻辑?原创 2024-12-15 07:23:23 · 610 阅读 · 0 评论 -
Python讲解:装饰者模式
装饰者模式是一种结构型设计模式原创 2024-12-14 18:15:00 · 609 阅读 · 0 评论 -
Go讲解设计模式:代理模式
首先,我们需要定义一个File接口,该接口声明了所有文件应该实现的方法。// File 定义文件的基本操作接口Close()原创 2024-12-14 20:00:00 · 831 阅读 · 0 评论 -
Go讲解:享元模式
/ Flyweight 定义了享元对象的接口。原创 2024-12-14 19:45:00 · 1316 阅读 · 0 评论 -
Go讲解:责任链模式
责任链模式的主要目的是将请求的发送者和接收者解耦,使得多个对象都有机会处理请求。每个处理者都有机会处理请求或将其传递给下一个处理者,直到有一个处理者能够处理该请求为止。通过引入责任链模式,可以将请求的发送者和接收者解耦,使得系统更加灵活和易于扩展。首先,定义一个处理者接口Logger,用于表示日志处理者的通用行为。// Logger 定义了日志处理者的通用行为责任链模式是一种强大的行为型设计模式,特别适用于需要将请求的发送者和接收者解耦、支持多个处理者或动态地添加和移除处理者的场景。原创 2024-12-14 19:30:00 · 1559 阅读 · 0 评论