汤姆设计模式系列
文章平均质量分 96
汤姆z
热爱学习,只有不断的学习才能不断地提高
展开
-
2023-7-26-第二十三式解释器模式
解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义语言的文法规则,并解释和执行特定的语言表达式。该模式将每个语言元素映射到一个解释器对象,通过组合这些解释器对象来构建复杂的语句。在解释器模式中,通常有以下几个角色:- 抽象表达式(Abstract Expression):定义了解释器的接口,声明了解释操作的方法。- 终结符表达式(Terminal Expression):实现了抽象表达式接口,并表示语言中的一个终结符,即不再可拆分的最小语法单元。- 非终结符表达原创 2023-07-26 11:08:46 · 331 阅读 · 0 评论 -
2023-7-24-第二十二式备忘录模式
备忘录模式是一种软件设计模式,用于在不破坏封装性的情况下保存和恢复对象的内部状态。它允许将对象的状态保存到一个称为备忘录的中介者(或备份)中,并在需要时从中恢复。这样可以有效地实现撤销操作、历史记录功能或者以某种方式回滚对象的状态。备忘录模式由三个主要角色组成:1. 发起人(Originator):发起人是包含需要保存状态的对象。它可以创建并保存当前状态到备忘录中,或者从备忘录中恢复之前保存的状态。2. 备忘录(Memento):备忘录是存储发起人对象状态的中介者。它提供了一种封装机制,确保只有原创 2023-07-24 09:53:26 · 243 阅读 · 0 评论 -
2023-7-20-第二十一式访问者模式
访问者模式(Visitor Pattern)是一种行为型设计模式,通过将算法的操作从数据结构中分离出来,使得可以在不改变数据结构的情况下定义新的操作。该模式允许您对一组对象执行特定操作,而无需修改这些对象的类。在访问者模式中,有两个主要角色:1. 访问者(Visitor):定义了对各种元素对象的操作方法,每个操作都可以根据具体的元素类型执行不同的逻辑。2. 元素(Element):表示被访问的对象,提供一个接受访问者的方法,该方法将调用访问者的适当操作。访问者模式的核心思想是将操作和数据结构分原创 2023-07-20 18:01:41 · 204 阅读 · 0 评论 -
2023-7-19-第二十式迭代器模式
迭代器模式(Iterator Pattern)是一种行为设计模式,它提供了一种顺序访问集合中元素的方法,而无需暴露集合的实现细节。通过使用迭代器,我们可以遍历一个复杂的数据结构,如列表、树或图,而不必了解内部的数据组织方式。迭代器模式的主要目标是将迭代过程从容器类中分离出来,使得容器和迭代器能够独立地演化,并且可以相互替换。这样,我们可以轻松地编写可重用的迭代器代码,以适应不同类型的集合。通常,迭代器模式涉及两个核心角色:- 迭代器(Iterator):定义了按顺序访问集合元素的接口,包括获取下原创 2023-07-19 21:58:27 · 1241 阅读 · 0 评论 -
2023-7-14-第十九式中介者模式
中介者模式(Mediator Pattern)是一种行为型设计模式,用于解耦多个对象之间的复杂交互和通信。在中介者模式中,多个对象不直接相互通信,而是通过一个中介者对象进行通信。中介者模式的核心思想是将对象之间的交互逻辑封装到中介者对象中,从而使得各个对象之间的关系变得松散。这样一来,每个对象只需要与中介者进行交互,而无需了解其他对象的存在和细节,从而简化了对象之间的耦合关系。在中介者模式中,通常会有一个抽象中介者类或接口,定义了对象之间交互的方法。具体的中介者类实现了这些方法,并负责协调对象之间的原创 2023-07-14 11:53:45 · 222 阅读 · 0 评论 -
2023-7-13-第十八式观察者模式
观察者模式(Observer Pattern)是一种软件设计模式,用于实现对象间的一对多依赖关系。在该模式中,当一个对象(被观察者或主题)的状态发生变化时,它会自动通知其所有依赖对象(观察者),使得这些观察者能够及时更新自己的状态。观察者模式涉及以下几个核心角色:1. Subject(被观察者/主题):定义了被观察的对象接口。它维护一组观察者对象,并提供添加、删除和通知观察者的方法。2. Observer(观察者):定义了接收和处理被观察者通知的接口。观察者通过该接口与被观察者建立联系,并在被观原创 2023-07-13 20:28:28 · 766 阅读 · 0 评论 -
2023-7-12-第十七式状态模式
状态模式是一种行为设计模式,它允许对象在不同的内部状态下改变其行为。在状态模式中,对象根据自身的状态选择不同的策略或算法来完成特定的任务。这种模式支持将复杂的条件分支语句转化为一组相互独立的状态类,并使用面向对象的方式进行管理和切换。状态模式的核心概念包括三个角色:上下文(Context)、抽象状态(State)和具体状态(Concrete State)。上下文是包含状态的对象,它可以根据当前的状态委派给不同的具体状态处理具体的行为。抽象状态是定义了一个接口或基类,用于描述状态的共同行为。具体状态则实现原创 2023-07-12 16:17:42 · 1201 阅读 · 0 评论 -
2023-7-11-第十六式职责链模式
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象按照顺序处理请求,而不需要显式指定接收者。每个处理对象都可以决定是否处理请求以及将请求传递给下一个对象。在责任链模式中,通常有一个抽象处理器(Handler)作为基类,定义了处理请求的接口方法,并维护一个指向下一个处理器的引用。具体的处理器(Concrete Handler)继承抽象处理器,并实现自己的处理逻辑。每个处理器都能够根据自身的职责决定是否能够处理请求,如果可以,则进行处理,否则将请求原创 2023-07-11 17:29:15 · 292 阅读 · 0 评论 -
2023-7-10-第十五式命令模式
在命令模式中,通过创建一个具体的命令对象,将请求的操作和参数进行封装,然后将该命令对象传递给调用者。具体命令负责封装命令的参数和上下文信息,并通过调用接收者的方法来完成实际的业务逻辑。综上所述,合理划分命令、灵活配置命令链、支持撤销和恢复、考虑安全性和性能问题,以及与其他模式结合使用,都是在使用命令模式时需要注意的事项。命令模式允许将操作进行参数化,即将操作及其参数封装在命令对象中,可以根据需要动态改变命令的参数。通过保存命令对象的历史记录,可以实现撤销操作,并且可以重复执行已撤销的命令来实现恢复操作。原创 2023-07-10 18:40:34 · 701 阅读 · 0 评论 -
2023-7-8-第十四式策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的行为。策略模式将不同的算法或行为封装在独立的类中,并使得它们可以互相替换,而客户端代码则不需要了解具体的实现细节。在策略模式中,通常包含以下几个角色:1. 环境(Context):环境类持有一个策略对象的引用,并在运行时调用策略对象的方法。环境类提供了一个接口,允许客户端在运行时动态地切换不同的策略。2. 抽象策略(Strategy):抽象策略定义了一个共同的接口,声明了一个或多个策略方法,每个方法对应了一原创 2023-07-07 18:14:32 · 797 阅读 · 1 评论 -
2023-7-7-第十三式模板方法模式
模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中实现。在模板方法模式中,**一个抽象类公开定义了执行它的方法的方式/顺序,而具体的实现则由其子类提供**。该模式主要包含以下角色:1. 抽象类(Abstract Class):定义了一个模板方法,该方法定义了算法的骨架,其中某些步骤由子类来实现。2. 具体类(Concrete Class):实现了抽象类中的抽象方法,完成算法中具体的步骤。模板方法模式的核心思想是原创 2023-07-07 15:57:21 · 294 阅读 · 0 评论 -
2023-6-30-第十二式组合模式
组合模式是一种设计模式,它允许我们将对象组织成树形结构,并且以相同的方式处理单个对象和组合对象。这意味着客户端无需关心对象是单独的叶子节点,还是以组合形式包含其他子节点。组合模式主要由三个角色组成:1. 组件(Component):定义了组合对象和叶子对象的共同操作接口。可以是接口或抽象类,它可以包含其他组件作为子节点的方法。2. 叶子(Leaf):表示组合的叶子对象,实现了组件接口的方法。叶子对象没有子节点。3. 组合(Composite):表示包含子节点的组合对象,实现了组件接口的方法。组合对原创 2023-06-30 17:42:07 · 364 阅读 · 0 评论 -
2023-6-29-第十一式代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过代理对象控制对真实对象的访问。代理模式在访问对象时引入了一个中间层,以便在不改变原始对象的情况下增加额外的功能或限制访问。代理模式的核心思想是通过**引入代理对象**,代替直接访问真实对象。代理对象与真实对象具有相同的接口,使得客户端可以透明地使用代理对象,而无需关心真实对象的具体实现。代理模式的常见应用场景包括:1. 远程代理(Remote Proxy):代理对象用于控制对远程对象的访问,隐藏了网络通信的细节。2. 虚拟原创 2023-06-29 17:09:44 · 442 阅读 · 0 评论 -
2023-6-28-第十式享元模式
享元模式(Flyweight Pattern)是一种软件设计模式,旨在通过**共享对象**来减少内存使用和提高性能。在享元模式中,将对象分为两种类型:内部状态(Intrinsic State)和外部状态(Extrinsic State)。内部状态是对象共享的部分,它包含对象创建后不会发生变化的数据。而外部状态是对象特定的部分,它包含对象在运行时可能发生变化的数据。享元模式通过使用**工厂模式来创建对象**,并通过对象池或缓存池来管理已创建的对象。当需要创建对象时,检查对象池中是否已存在具有相同内部状原创 2023-06-28 18:07:23 · 227 阅读 · 0 评论 -
2023-6-27-第九式外观模式
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个高层次的统一接口,用来简化一组子系统的使用。外观模式隐藏了子系统的复杂性,使得客户端能够更加方便地使用子系统功能,同时也降低了客户端与子系统之间的耦合度。在外观模式中,外观类(Facade Class)充当了客户端与子系统之间的中介,它向客户端提供了一个简单的接口,同时协调并调用子系统中的各个组件完成特定的功能。客户端只需要通过外观类使用子系统,而无需理解其具体实现细节。外观模式的主要优点包括:1.简化了客户端的调用过程,原创 2023-06-27 16:53:00 · 392 阅读 · 0 评论 -
2023-6-26-第八式装饰器模式
装饰器模式是一种结构型设计模式,它通过动态的将责任附加到对象上来扩展对象的功能。换句话说,它提供了一种不通过子类化就能扩展对象功能的方式。装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。在装饰器模式中,有一个基本的对象,称之为**组件**(component),它定义了一个共同的接口,可以被具体的组件或装饰器所实现。装饰器(decorator)会对组件进行包装,从而给组件增加新的功能。装饰器也实现了组件的接口,所以它们可以互相嵌套和组合,从而形成一个功能更加丰富的对象。在代码实现上,原创 2023-06-26 16:59:46 · 373 阅读 · 0 评论 -
2023-6-16-第七式桥接模式
桥接模式是一种结构型设计模式,它的目的是将一个大类或一系列紧密相关的类拆分成抽象和实现两个独立的层次结构,从而能够在这两个层次之间进行更加灵活的组合和扩展。具体来说,桥接模式通过引入一个抽象层次结构来隔离一个类的接口和实现,并允许它们各自独立地变化,从而实现了更加灵活和可扩展的设计。在桥接模式中,抽象层次结构定义了一个抽象接口,它是一组独立于具体实现的操作。而实现层次结构则实现了这些操作,并负责具体的实现细节。通过将这两个层次结构分离,桥接模式使得它们能够独立地变化,并且能够在运行时动态地组合和扩展。这原创 2023-06-16 15:48:27 · 703 阅读 · 0 评论 -
2023-6-15-第六式适配器模式
适配器模式是一种结构型设计模式,它允许**将一个类的接口转换成客户端所期望的另外一个接口**。适配器模式通常用于两个已有系统之间接口不兼容的情况下,或者在需要复用一个已有类而其接口不符合当前需求的情况下。适配器模式包含以下几个角色:1. 目标(Target):定义客户端所期望的接口,这是客户端代码所使用的接口。2. 适配器(Adapter):实现目标接口,并且持有一个被适配对象的引用。适配器将客户端请求转换成被适配对象可以处理的格式。3. 被适配对象(Adaptee):定义了原始接口,但与目原创 2023-06-15 11:23:50 · 1004 阅读 · 0 评论 -
2023-6-14-第五式原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过**复制现有对象来创建新对象**,而不必从头开始编写代码。在原型模式中,每个对象都被视为一个原型,可以通过克隆(clone)操作来创建新的实例。原型模式适用于需要创建大量相似对象的场景,例如游戏中的敌人、枪支等物品。**使用原型模式可以避免重复创建和初始化相同的对象**,提高应用程序的性能和效率。在原型模式中,一般会定义一个**抽象的原型类,该类包含一个克隆方法,用于返回当前对象的副本**。具体的原型类则继承自抽象原原创 2023-06-14 10:30:56 · 1205 阅读 · 0 评论 -
2023-6-13-第四式建造者模式
建造者模式是一种创建型设计模式,它使得对象的构建与表示分离,从而可以通过相同的构建过程创建不同的表示。这种模式适用于需要创建复杂对象,且对象的构建过程比较固定但存在多个组合方式的情况。通过使用建造者模式,可以将对象的构建过程抽象出来,**使得相同的构建过程可以用于创建不同类型的对象**。同时,建造者模式还可以避免创建对象时出现参数错误或者遗漏等问题,提高了代码可维护性和可读性。原创 2023-06-13 10:37:25 · 761 阅读 · 1 评论 -
2023-6-12-第三式单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它保证某一个类只有一个实例存在,并提供一个全局访问点。在单例模式中,通过将类的构造函数设为私有,从而防止外部直接创建对象。同时,通过一个静态方法或者变量来获取该类的唯一实例。如果该类的实例不存在,则创建一个新的实例并返回;如果该类的实例已经存在,则直接返回该实例。单例模式的优点是可以避免因为创建多个实例而导致的资源浪费和性能下降。同时,由于该类只有一个实例存在,因此可以更好地控制该实例的状态和行为。此外,单例模式还可以提供一个全局访原创 2023-06-12 12:03:08 · 527 阅读 · 0 评论 -
2023-6-11-第二式抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在抽象工厂模式中,客户端通过调用抽象工厂接口中的方法来创建一系列相关的产品对象。这些产品对象都是由具体的工厂类来创建的,每个具体工厂类都负责创建一组特定的产品。抽象工厂模式的优点是可以保证客户端始终只使用同一组产品,而不会出现不兼容的情况。此外,通过使用抽象工厂模式,可以使客户端与具体产品的实现相分离,从而使系统更加灵活,易于扩展和维护。在原创 2023-06-12 10:45:24 · 708 阅读 · 0 评论 -
2023-6-10-第一式工厂方法模式
工厂方法模式(Factory Method Pattern)是一种常见的创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法模式使得一个类的实例化延迟到其子类。在工厂方法模式中,通常包含以下几个角色:1. 抽象产品(Product):定义了产品的属性和方法。2. 具体产品(Concrete Product):实现抽象产品的具体属性和方法。3. 抽象工厂(Creator):定义用于创建产品的接口,包含一个抽象工厂方法。4. 具体工厂(Concrete Creator原创 2023-06-10 18:00:00 · 603 阅读 · 0 评论 -
2023-6-9-一天一种设计模式
设计模式是一种被广泛应用于软件开发的编程思想,它提供了一套通用的解决方案来解决各种常见的设计问题。在软件开发中,为了提高代码的可重用性、灵活性和可维护性,我们经常会遇到各种设计问题。这些问题可能涉及到对象之间如何协作、如何处理变化、如何管理状态等方面。设计模式通过抽象出这些常见的问题,并提供了一套通用的解决方案,帮助我们更好地组织代码、降低耦合度、提高代码可读性和易扩展性。使用设计模式可以减少代码重复、提高代码可维护性、降低系统的复杂度以及使代码更加清晰易懂。同时,设计模式也可以提高团队间的沟通效率原创 2023-06-09 11:54:47 · 670 阅读 · 0 评论