设计模式
文章平均质量分 97
有梦想的攻城狮
既然选择了远方,留给别人的就只能是背影
展开
-
设计模式-委托模式
委托模式是一种行为模式,用于在面向对象设计中解决多个对象接收并处理同一请求的问题。它通过将请求委托给另一个对象来统一处理请求,提高程序的性能和降低内存空间的使用。委托模式利用了事件的冒泡机制,将一个或一组元素的事件委托给它们的父层或更外层元素上。真正绑定事件的是外层元素,当事件响应到需要绑定的元素上时,会通过事件冒泡机制触发外层元素的绑定事件,然后在该元素上执行函数。这种模式的优点在于可以减少重复的代码,提高代码的可重用性和可维护性。同时,它也可以降低系统的耦合度,使系统更加灵活和易于扩展。原创 2024-01-22 23:41:36 · 1466 阅读 · 3 评论 -
设计模式-资源库模式
资源库模式是一种架构模式,介于领域层与数据映射层(数据访问层)之间。它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问。资源库模式协调领域和数据映射层,利用类似于集合的接口来访问领域对象。独立性:资源库模式作为一个独立的层,将领域对象与数据访问细节分离,使得领域层可以专注于业务逻辑,而不必关心数据存储和访问的细节。原创 2024-01-20 23:12:56 · 1481 阅读 · 8 评论 -
设计模式-传输对象模式
传输对象模式(Transfer Object Pattern)是一种设计模式,用于从客户端向服务器一次性传递带有多个属性的数据。传输对象也被称为数值对象。这种设计模式通常用于将多个属性打包到一个对象中,以便通过网络传输。传输对象是一个具有getter/setter方法的简单的POJO类,它是可序列化的,所以它可以通过网络传输。它没有任何的行为,只是用于存储数据。服务器端的业务类通常从数据库读取数据,然后填充POJO,并把它发送到客户端或按值传递它。原创 2024-01-14 21:59:35 · 1155 阅读 · 4 评论 -
设计模式-委托模式
委托模式是一种软件设计模式,其中一个对象(委托对象)将某些操作委托给另一个对象(委托方法)进行处理。这种模式的核心思想是将复杂的功能分解到不同的对象中去实现,降低单个对象的复杂度,从而提高系统的可维护性和可扩展性。在委托模式中,接受请求的对象将请求委托给另一个对象来处理,类似于回调函数的机制。委托模式通过降低单个对象的复杂度来提高系统的可维护性和可扩展性。委托模式广泛应用于事件驱动编程、GUI编程、多线程编程等领域。在实际应用中,委托模式具有广泛的应用场景。原创 2024-01-14 16:50:51 · 1152 阅读 · 4 评论 -
设计模式-注册模式
注册模式是一种设计模式,也称为注册树模式或注册器模式。这种模式的主要目的是为应用中经常使用的对象创建一个中央存储器来存放这些对象,通常通过一个只包含静态方法的抽象类来实现(或者通过单例模式)。注册模式可以将已经创建好的对象挂载到某个全局可以使用的数组上,在需要使用的时候,直接从该数组上获取即可。这就好比一个“对象的电话簿”——储存并且能够取回对对象引用的登记簿。这种模式解决了全局共享对象和交换对象的问题,使得任何地方都可以直接访问这些对象。因此,注册模式成为整个应用信息的决定性来源。原创 2024-01-12 22:55:57 · 1089 阅读 · 1 评论 -
设计模式-数据映射模式
数据映射模式是一种将对象和数据存储映射起来的数据访问方式。具体来说,对一个对象的操作会映射为对数据存储的操作。这个数据访问层在持久化数据存储层(一般是关系型数据库)和驻于内存的数据表现层之间进行双向数据传输。其目的是让持久化数据存储层、驻于内存的数据表现层以及数据映射本身三者相互独立、互不依赖。此外,数据映射模式的核心在于其数据模型遵循单一职责原则,这也是与Active Record模式的不同之处。最典型的数据映射模式例子就是数据库ORM模型(Object Relational Mapper)。原创 2024-01-11 23:51:28 · 1510 阅读 · 14 评论 -
设计模式-规格模式
规格模式(Specification Pattern)是一种行为设计模式,其目的是将业务规则封装成可重用的对象,并能够动态地组合这些规则,以实现更复杂的业务逻辑。定义:规格模式可以认为是组合模式的一种扩展。在程序中,某些条件决定了业务逻辑,这些条件可以抽离出来以某种关系(与、或、非)进行组合,从而灵活地对业务逻辑进行定制。在查询、过滤等应用场合中,通过预定义多个条件,然后使用这些条件的组合来处理查询或过滤,而不是使用逻辑判断语句来处理,可以简化整个实现逻辑。原创 2024-01-10 22:36:40 · 1132 阅读 · 6 评论 -
设计模式-空对象模式
空对象模式是一种设计模式,用于处理对象不存在的情况。它通过返回一个空对象来代替 null 值,从而避免了空指针异常。空对象通常具有与正常对象相同的接口,但其方法体为空或返回默认值。在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。加强系统的稳固性,有效地防止空指针报错对整个系统的影响,使系统更加稳定。实现对空对象情况的定制化的控制,掌握处理空对象的主动权。原创 2024-01-09 23:53:21 · 1174 阅读 · 2 评论 -
设计模式-状态模式
状态模式(State Pattern)是一种行为型设计模式,允许一个对象在其内部状态发生改变时改变其行为。在状态模式中,将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,以满足“单一职责原则”。状态模式的核心是状态与行为绑定,不同的状态对应不同的行为。行为随状态改变而改变的场景。一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态。在实现状态模式时,通常包括环境类角色(Context)、抽象状态角色(IState)和具体状态角色(ConcreteState)三个角色。原创 2024-01-08 23:51:36 · 1153 阅读 · 0 评论 -
设计模式-模板方法模式
模板方法模式是一种行为型设计模式,它定义了一个操作中的算法的骨架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。它封装了一个固定流程,该流程由几个步骤组成,具体步骤可以由子类进行不同的实现,从而让固定的流程产生不同的结果。在软件工程中,模板方法模式是一种常用的设计模式,用于解决算法的框架和部分步骤已经确定,而部分步骤需要根据不同情况进行变化的问题。原创 2024-01-07 21:26:28 · 1141 阅读 · 0 评论 -
设计模式-职责链模式
职责链模式是一种设计模式,用于解决请求的发送者和接收者之间的耦合问题。它使多个对象都有机会处理请求,直到某个对象能够处理该请求为止。每个职责链上的对象都有一个处理请求的方法,如果该方法能够处理请求,则直接处理并返回结果;如果不能处理,则将请求传递给链上的下一个对象。在职责链模式中,每个对象都有机会处理请求,直到找到能够处理该请求的对象为止。这种模式可以降低系统的耦合度,提高系统的灵活性和可扩展性。原创 2024-01-06 00:34:52 · 1236 阅读 · 20 评论 -
设计模式-流接口模式
流接口模式是一种面向对象的编程模式,它可以使代码更具可读性和流畅性。流接口模式的核心思想是采用链式调用的方式来实现一系列对象方法的调用,每个方法调用都返回一个对象,从而可以继续调用下一个方法。这种模式类似于自然语言的句子结构,使得代码更易于理解和维护。在流接口模式中,每个方法都返回一个对象,通常是通过在方法签名中加入"this"关键字来实现。这样,每个方法都可以被视为在返回对象上执行的操作,从而形成了一个方法调用的链。流接口模式的好处在于它可以使代码更加简洁和易读。原创 2024-01-03 23:44:17 · 1068 阅读 · 4 评论 -
设计模式-调停者模式
调停者模式是一种软件设计模式,主要用于模块间的解耦,通过避免对象之间显式的互相指向,降低耦合度。这种模式通常用于解决多个对象之间重复访问、无规律性、交互方式复杂且通常存在非结构依赖的问题。在调停者模式中,通常会有一个抽象调停者(Mediator)类,它定义了同事对象与调停者对象之间的接口,主要方法是一个或多个事件方法。具体调停者(ConcreteMediator)类则实现了抽象调停者所声明的事件方法,负责具体的协调各同事对象的交互关系。原创 2023-12-30 23:59:26 · 1031 阅读 · 0 评论 -
设计模式-抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是设计模式中的一种,属于创建型模式。它提供了一种构建产品族的机制,可以创建多个产品族中的产品对象,而无需在客户端指定产品的具体类型。当有多个抽象角色时,可以使用抽象工厂模式。抽象工厂模式通过提供一个接口,使得客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。抽象工厂模式在系统中有多个产品族结构时非常有用,每个产品族内又有多个具体的产品系列。它根据不同的业务品种和业务分类,通过抽象工厂模式来产生需要的对象。原创 2023-12-29 22:53:24 · 1373 阅读 · 0 评论 -
设计模式-多例模式
多例模式是一种创建型设计模式,属于对象创建类型。多例模式的特点是允许一个类有多个实例,并且这些实例都是该类本身。多例模式通常用于设计复杂的系统,例如数据库连接、网络通信等。可以限制实例数量:多例模式可以限制实例数量,确保系统中只有指定数量的实例存在,避免过多的资源消耗。可以复用已有实例:多例模式可以复用已有实例,避免重复创建对象,提高系统性能。可以灵活控制实例的生命周期:多例模式可以灵活控制实例的生命周期,可以在需要时创建实例,也可以在不需要时销毁实例,避免浪费系统资源。原创 2023-12-28 23:57:23 · 1181 阅读 · 9 评论 -
设计模式-对象池模式
对象池模式是一种创建型设计模式,它将对象预先创建并初始化后放入一个池中,以供其他对象使用。这种模式的主要目的是减少频繁创建和销毁对象所占用的内存空间和初始化时间。一个对象池包含一组已经初始化并且可以使用的对象。当某个对象需要使用这些对象时,可以从池中获取一个对象,对其进行操作处理,并在使用完毕后将该对象归还给池子,而不是直接销毁。这样可以避免频繁地创建和销毁对象,提高内存管理效率。原创 2023-12-28 23:43:47 · 1145 阅读 · 1 评论 -
设计模式-过滤器模式
过滤器模式是一种设计模式,它允许开发人员使用不同的标准来过滤一组对象。这种模式是通过运算逻辑以解耦的方式将它们联系起来。在结构上,这种类型的设计模式属于结构型模式,即按条件筛选一组对象出来。抽象过滤器角色(AbstractFilter):负责定义过滤器的实现接口。具体的实现还需要具体过滤器角色去参与。客户端可以调用抽象过滤器角色中定义好的方法,将客户端的所有请求委派到具体的实现类去,从而让实现类去处理。原创 2023-12-27 23:54:19 · 1079 阅读 · 1 评论 -
设计模式-依赖注入模式
依赖注入(Dependency Injection,简称DI)是一种面向对象编程中的设计模式,它的目的是将一个对象所依赖的其他对象的创建过程从该对象本身中分离出来,以便更好地实现解耦和可测试性。在DI模式中,对象不是通过自己创建所需要的依赖对象,而是通过构造函数、属性或接口传递进来。构造函数注入(Constructor Injection):依赖对象通过被依赖对象的构造函数传入。这种方式是DI的主要方式,也是最简单的一种方式。它可以保证依赖对象的创建和注入是在同一时间完成的,因此可以确保依赖对象的可用性。原创 2023-12-26 23:32:34 · 2045 阅读 · 11 评论 -
设计模式-注册模式
注册模式是一种设计模式,也称为注册树或注册器模式。这种模式将类的实例化和创建分离开来,避免在应用程序启动时实例化对象,以避免造成资源的浪费。注册模式的核心思想是将类的创建和管理的代码封装到一个工厂类中,用户代码无需显式地通过“new”关键字实例化对象。相反,用户可以将类对象注册到全局的注册树上,这些对象就可以被应用程序中的任何地方访问。使用注册模式的优势在于,它提供了一种集中管理对象的方式,避免了在每个需要使用对象的地方重复创建和销毁对象。原创 2023-12-26 23:17:25 · 1288 阅读 · 0 评论 -
设计模式-生成器模式
生成器模式是一种创建型模式,它的主要目的是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式的使用场景包括:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;当构造过程必须允许被构造的对象有不同的表示时。生成器模式的主要优点包括:建造者独立,易扩展;便于控制细节风险。缺点则在于:产品必须有共同点,范围有限制;如内部变化复杂,会有很多的建造类。原创 2023-12-25 20:56:38 · 1528 阅读 · 9 评论 -
设计模式-备忘录模式
备忘录模式(Memento Pattern)是一种对象行为型模式,又被称为快照模式或Token模式。该模式的主要目标是,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。备忘录模式适用于需要记录和恢复对象内部状态的场景。例如,在实现撤销和重做功能时,可以使用备忘录模式来保存和恢复对象的状态。发起人(Originator)备忘录(Memento)和管理者(Caretaker)。原创 2023-12-24 20:14:23 · 1216 阅读 · 8 评论 -
设计模式-解释器模式
解释器模式是一种行为型设计模式,它定义了一门语言的文法表示,并建立了一个解释器来解释该语言中的句子。这里的“语言”是指适用规定格式和语法的代码。解释器模式主要包含四个角色:抽象表达式、终结符表达式、文法类和环境类。抽象表达式是所有终结符表达式和非终结符表达式的公共父类,声明了抽象的解释操作。非终结符表达式用于描述文法中的非终结符号,而终结符表达式则实现了与文法中的终结符相关联的解释操作。在解释器模式中,通常只有少数几个终结符表达式类,它们的实例可以通过非终结符表达式组成较为复杂的句子。原创 2023-12-23 22:39:26 · 1165 阅读 · 3 评论 -
设计模式-门面模式
门面模式是一种常用的软件设计模式,也称为外观模式。它提供了一个高层次的接口,将一个子系统的外部与内部通信通过一个统一的对象进行,使得子系统更易于使用。门面模式在系统中主要起中介作用,为复杂的子系统提供一个简单的接口,从而降低了系统的耦合度,提高了系统的灵活性和安全性。原创 2023-12-22 22:40:19 · 1210 阅读 · 3 评论 -
设计模式-中介者模式
中介者模式是一种行为型设计模式,它通过引入一个中介者对象,将系统中的各个对象之间的耦合关系转变为对中介者对象的依赖关系,从而降低多个对象之间的耦合度,使得这些对象可以更好地协作。在中介者模式中,中介者对象扮演了集成所有相关对象的角色。这个对象可以处理所有相关对象之间的通信,并控制这些对象之间的交互以完成某一特定任务。当多个对象之间需要相互通信时,它们不再直接彼此引用,而是通过中介者对象来进行通信和协调。抽象中介者(Mediator):声明所有具体中介者的公共接口,主要用于对象之间的通信和协调。原创 2023-12-21 23:14:24 · 1059 阅读 · 1 评论 -
设计模式-访问者模式
访问者模式是一种行为设计模式,它表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。在访问者模式中,一个访问者类实现了访问者接口,可以访问对象结构中的元素。这个接口定义了访问者可以执行的操作。然后,每个元素类都实现了元素接口,这个接口定义了元素可以接受的操作。访问者模式将数据的操作与数据结构进行分离,使得操作集合可相对自由地演化而不影响系统的数据结构。同时,通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。原创 2023-12-20 23:45:26 · 602 阅读 · 14 评论 -
设计模式-状态模式
状态模式是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为,使其看起来就像改变了自身的类。在状态模式中,对象的行为会随着其状态的不同而改变。这种模式的主要目标是将对象的状态独立出来,形成单独的状态类。通过设置不同的状态对象,可以让环境对象拥有不同的行为,而状态转换的行为对客户端是透明的。状态模式主要包含以下几个角色:环境(Context):拥有多种状态的对象,由于环境类的状态存在多样性且在不同状态下对象的行为有所不同,因此将状态独立出来形成单独的状态类。原创 2023-12-20 23:39:43 · 667 阅读 · 0 评论 -
设计模式-迭代器模式
迭代器模式是一种设计模式,它提供了一种方法来顺序访问聚合对象中的各种元素,而不需要暴露该对象的内部表示。在面向对象编程中,迭代器模式是一种常见的设计模式,它可以让用户通过特定的接口遍历容器中的每一个元素而不需要了解底层的实现。迭代器接口:定义了迭代功能的方法,例如hasNext()和next()方法。迭代器实现类:是迭代器接口的具体实现类。容器接口:定义了基本的增删功能以及类似Iterator iterator()的方法。容器实现类:是容器接口的具体实现类。原创 2023-12-19 23:09:46 · 1313 阅读 · 0 评论 -
设计模式-命令模式
命令模式是一种行为设计模式,它将一个请求封装为一个对象,从而让你使用不同的请求把客户端与服务端操作解耦。命令(Command):这是一个抽象接口,定义了执行操作的接口,通常包含一个执行方法(execute)。具体命令(ConcreteCommand):实现了命令接口,持有对一个接收者对象的引用,并将请求转发给接收者执行具体的操作。接收者(Receiver):负责具体执行命令所指定的操作。调用者(Invoker):负责调用命令对象执行请求。原创 2023-12-17 23:58:18 · 1571 阅读 · 46 评论 -
设计模式-责任链模式
责任链模式(Chain of Responsibility, COR)是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连。在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求为止。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。原创 2023-12-17 23:56:01 · 1017 阅读 · 2 评论 -
设计模式-访问者模式
访问者模式是一种行为型设计模式,它提供了一种方式,可以在不改变各元素类的前提下定义作用于这些元素的新操作。这种模式适用于数据结构相对稳定,而操作易于变化的情况。访问者模式的主要组成部分包括访问者和被访问元素。被访问元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如,处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。原创 2023-12-16 23:39:25 · 1930 阅读 · 42 评论 -
设计模式-模板模式
模板模式是一种行为型设计模式,它通过将算法的骨架抽象成一个模板方法,将具体的操作留给子类来实现。这种模式的主要思想是将一个行为定义为一个框架,然后由子类填充细节。在模板模式中,抽象类公开定义了执行它的方法的方式/模板。子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种模式旨在定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板模式封装不变部分,扩展可变部分,提取公共代码,便于维护。原创 2023-12-16 23:24:50 · 1552 阅读 · 2 评论 -
设计模式-观察者模式
观察者模式是一种对象行为模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。这种模式被广泛应用于软件界面元素之间的交互,在业务对象之间的交互、权限管理等方面也有广泛的应用。例如,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。原创 2023-12-14 23:47:23 · 2033 阅读 · 40 评论 -
设计模式-策略模式
策略模式是一种软件设计模式,它定义了一组算法(业务规则),并封装了每个算法。这族的算法可以互换代替。策略模式的目标是将算法与使用算法的客户端分离,使它们可以独立演化。在策略模式中,抽象策略角色通常由一个接口或者抽象类实现,具体策略角色则封装了相关的算法和行为。环境角色则持有一个策略类的引用,可以选择使用不同的策略进行计算或操作。在应用场景中,策略模式适用于需要根据不同情况选择不同算法的情况。例如,在交个人所得税的场景中,需要根据不同国家的税收政策选择不同的算税方法。原创 2023-12-13 22:56:30 · 1120 阅读 · 2 评论 -
设计模式-享元模式
享元模式是一种软件设计模式,它使用共享对象来减少内存使用量,并分享信息给尽可能多的相似对象。这种模式适用于大量对象导致内存使用不可接受的情况,其中对象的部分状态可以共享。享元模式的实现通常包括两个主要部分:内部状态和外部状态。内部状态是对象本身的状态,而外部状态是与对象共享的状态。享元模式通过将共享状态提取到外部数据结构中,并在需要时将其传递给享元对象,从而实现了对象的共享。享元模式的优点在于它可以大大减少对象的创建,降低系统的内存占用,提高效率。原创 2023-12-12 23:21:08 · 1189 阅读 · 24 评论 -
设计模式-组合模式
组合模式是一种结构型设计模式,它针对由多个节点对象(部分)组成的树形结构的对象(整体)而发展。组合模式使得用户对单个对象和组合对象的使用具有一致性,它优化处理递归或分级数据结构。组合模式的核心思想是将对象看作是一个树形结构,其中每个节点可以是一个单独的对象(叶子节点)或者一个包含其他节点的容器(组合节点)。叶子节点和组合节点都实现了相同的接口,这样客户端就可以对它们进行一致的操作,而不需要关心它们的具体类型。可以将对象组合成树形结构,表示整体-部分的层次关系,符合人们的直觉。原创 2023-12-11 23:58:36 · 1264 阅读 · 29 评论 -
设计模式-桥接模式
桥接模式是一种对象结构型模式,也称为柄体(Handle and Body)模式或接口(interface)模式。它的主要目的是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。这种模式通过组合的方式建立两个类之间的联系,而不是通过继承。桥接模式的核心在于解耦抽象和实现。原创 2023-12-11 23:57:07 · 1213 阅读 · 12 评论 -
设计模式-外观模式
外观模式(Facade Pattern)是一种结构性设计模式,它隐藏了系统的复杂性,并向客户端提供了一个简洁且方便的接口。外观模式将一个系统中的每一项称为一个子系统,为这一组子系统提供一个高层接口。这个接口使得这一子系统更加容易被人使用。通俗的来讲就是,将一系列的行为封装为一个接口,在这个接口中统一来调用这些行为,这样在程序员使用的时候就不需要一个一个接口的调用,而只需要调用统一的接口就可以了,以此来降低整个流程的复杂度。原创 2023-12-10 23:14:30 · 1371 阅读 · 16 评论 -
设计模式-代理模式
代理模式是一种设计模式,它为一个对象提供一个替身,以控制对这个对象的访问。这个替身被称为代理对象,它可以在客户端和目标对象之间起到中介的作用。通过这种方式,代理模式可以扩展目标对象的功能,并且在不修改目标对象代码的情况下添加一些额外的操作。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。静态代理动态代理(包括JDK代理和接口代理)和Cglib代理(可以在内存动态地创建对象,而不需要实现接口,属于动态代理的范畴)原创 2023-12-06 22:59:39 · 961 阅读 · 2 评论 -
设计模式-适配器模式
适配器模式是一种结构型设计模式,它用于将一个接口转换成客户端所期望的另一个接口,使原本由于接口不兼容而不能一起工作的类能够一起工作。适配器模式可以用来解决旧接口与新接口不兼容、多个类的接口不一致以及一个类的接口需要与其它类一起使用但接口不兼容的问题。目标接口:客户端所期望的接口,它定义了客户端可以调用的方法。适配器:将被适配者的接口转换成目标接口的中间件,它实现了目标接口,并持有一个被适配者的对象。被适配者:客户端所需要的对象,但它的接口与目标接口不兼容。原创 2023-12-04 23:07:43 · 1424 阅读 · 7 评论 -
设计模式-装饰器模式
装饰器模式是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式可以动态地给一个对象添加一些额外的职责,并且相比通过生成子类的方式,装饰器模式更加灵活。装饰器模式的本质在于通过组合而非继承的方式来扩展对象的功能。它提供了一种灵活的方式来添加或修改对象的行为,同时遵循开放封闭原则(Open-Closed Principle)。通过使用装饰器模式,可以在运行时动态地添加、移除或修改对象的功能,而无需修改现有的代码。原创 2023-12-03 17:54:47 · 1952 阅读 · 7 评论