代码
文章平均质量分 61
weixin_49429329
这个作者很懒,什么都没留下…
展开
-
设计模式(21)-策略模式及实现
提供了一种定义一系列算法的方法,将这些算法封装成独立的策略类,并使它们可以相互替换。在客户端中,创建一个上下文(Context)对象,该对象包含一个对策略类的引用,通过该引用调用相应的策略方法。这样,客户端可以在运行时选择不同的策略,而不需要修改上下文类。策略模式也可能导致类的数量增加,因为每个算法都需要一个对应的策略类。在使用策略模式时,需要权衡类的数量与灵活性之间的关系。它提高了代码的可维护性和扩展性,因为新的策略可以很容易地添加到系统中。实现策略接口,提供具体的算法实现。原创 2024-06-29 22:39:24 · 216 阅读 · 0 评论 -
设计模式(20)-观察者模式及实现
核心思想是定义一种一对多的依赖关系,使得一个主题(通常称为被观察者)可以同时维护多个观察者,并在其状态改变时自动通知所有观察者。这样,观察者无需关心主题的内部实现细节,而只需要关心主题的状态变化。在实现中,通常会定义一个抽象的主题类和一个抽象的观察者类,具体的主题和观察者类会继承这些抽象类并实现相应的方法。● 可扩展性:可以方便地增加新的观察者,而不会影响到已有的观察者和主题。存储与主题相关的状态,当接收到主题的更新通知时,更新自己的状态。维护当前状态,当状态改变时,给所有注册过的观察者发送通知。原创 2024-06-27 10:25:00 · 339 阅读 · 0 评论 -
设计模式(19)-备忘录模式及实现
备忘录模式使得对象的状态管理更加灵活。它允许对象在不暴露其内部结构的情况下进行状态的保存和恢复。这有助于实现撤销和重做功能,以及历史记录和快照功能。通过引入“备忘录”对象,允许在不暴露对象内部结构的情况下,捕获并存储对象的状态。同时,它还提供了一种将对象恢复到之前状态的方式。使用备忘录模式可能会增加一些内存开销,特别是如果需要存储大量的状态历史。负责创建一个备忘录,记录当前状态,并可以恢复到先前的状态。负责存储发起人的内部状态,并可以防止其他对象对其修改。负责保存备忘录,但不检查备忘录的内容。原创 2024-06-27 10:24:20 · 204 阅读 · 0 评论 -
设计模式(18)-迭代器模式及实现
提供了一种统一的方法来遍历不同类型的集合,而无需暴露集合内部的表示细节。迭代器负责遍历集合并提供统一的访问接口,而集合负责实际存储元素。● 优点:迭代器模式将遍历操作封装在迭代器中,使客户端代码更加简洁、可读,并且降低了与集合的耦合。● 权衡:迭代器模式可能会增加一些额外的类和接口,可能会稍微增加复杂性,但从长远来看,可以提高代码的可维护性和可扩展性。实现迭代器接口,跟踪当前遍历的位置,并实现迭代器接口中的所有方法。实现聚合接口,返回一个具体迭代器的实例,用于遍历具体聚合对象。定义了创建迭代器对象的接口。原创 2024-06-26 23:44:53 · 379 阅读 · 0 评论 -
设计模式(17)-中介者模式及实现
引入了一个中介者对象,它负责协调和管理对象之间的通信。● 降低耦合度:对象之间的通信逻辑被集中在中介者中,从而降低了对象之间的直接依赖,减少了耦合度,使系统更加灵活和可维护。● 集中管理:所有对象的交互逻辑都集中在中介者中,使得系统的交互逻辑更加清晰可见,便于管理和修改。● 可扩展性:通过增加或修改中介者对象,可以相对容易地扩展系统,而不需要修改对象之间的通信逻辑。● 复用性:中介者模式将交互逻辑与对象本身的业务逻辑分离,可以更容易地复用这些交互逻辑。实现了中介者接口,协调各个同事对象之间的交互。原创 2024-06-24 23:42:48 · 295 阅读 · 0 评论 -
设计模式(16)-命令模式及实现
命令模式的效果在于解耦命令的发送者和接收者,从而支持更灵活的代码组织。它允许您轻松地添加新的命令,排队命令,记录命令历史,甚至实现撤消和重做功能。命令模式提供了一种将请求封装成对象的方法,使得请求的发送者与请求的接收者之间不直接耦合。命令模式也可能引入一些复杂性,因为您需要为每个操作创建一个具体命令类。要求该命令被执行,它通常对命令对象进行参数化,然后执行该命令。实现命令接口,对应于具体的行为和接收者。知道如何实施与执行一个请求相关的操作。定义命令的接口,声明执行操作的方法。原创 2024-06-23 08:52:21 · 165 阅读 · 0 评论 -
设计模式(15)-责任链模式及实现
每个处理对象都包含一个对下一个处理对象的引用,形成一个链式结构。当一个请求到达时,它首先被传递给链中的第一个处理对象,如果该对象不能处理该请求,它会将请求传递给下一个处理对象,依此类推,直到找到能够处理请求的对象为止。实现了处理者接口,负责处理它所负责的请求,并且决定是否将请求传递给链中的下一个处理者。● 灵活性:可以根据需要动态地改变处理链中处理者的顺序,以及每个处理者的职责。● 可维护性:每个处理者关注单一的责任,使得代码更易于理解和维护。定义了处理请求的接口,所有具体处理者都实现这个接口。原创 2024-06-22 22:56:14 · 258 阅读 · 0 评论 -
设计模式(14)-模板方法模式及实现
通过定义一个抽象的父类,其中包含了算法的核心结构,但某些步骤使用抽象方法或受保护的虚拟方法来表示,这些方法由子类来实现。它提供了一个或多个抽象方法供子类实现,同时提供一个模板方法来定义算法的骨架。● 灵活性: 子类可以通过实现特定的步骤来定制算法的行为,而不需要改变算法的整体结构。● 代码复用: 核心算法结构在父类中定义,可以被多个子类共享,避免了重复的代码。● 代码一致性: 所有子类共享相同的算法模板,确保了算法的一致性。实现了抽象类中的抽象方法,具体化了算法的各个步骤。原创 2024-06-22 22:55:56 · 372 阅读 · 0 评论 -
设计模式(13)-解释器模式及实现
通过定义一种语言文法的表示,并提供一种解释器来解释这种语言的语句。这样,你可以将语句表示为抽象语法树,然后通过解释器逐步执行和解释这个语法树。解释器模式可能导致类的数量增加,因为每个语法规则都需要一个相应的表达式类。也实现了抽象表达式,用于表示文法中的非终结符。可以使你更容易地实现特定语言的解释和执行,尤其在处理自定义的领域特定语言时非常有用。实现了抽象表达式,用于表示文法中的终结符。包含解释器之外的全局信息,可以为解释器提供解释文法所需的外部数据。定义了解释器的接口,规定如何解释文法中的各个元素。原创 2024-06-21 20:06:16 · 161 阅读 · 0 评论 -
设计模式(12)-代理模式及实现
提供了一个代理对象,它充当了原始对象的替代品,以控制对原始对象的访问。● 虚拟代理(Virtual Proxy): 当创建原始对象需要大量资源时,代理对象可以充当一个轻量级的替代品,延迟原始对象的实际创建和初始化,从而提高性能。● 远程代理(Remote Proxy): 代理对象可以隐藏原始对象存在于远程服务器上的事实,使得客户端可以透明地访问远程对象。● 保护代理(Protection Proxy): 代理对象可以控制对原始对象的访问权限,确保只有具有特定权限的客户端可以访问原始对象。原创 2024-06-20 00:16:12 · 242 阅读 · 0 评论 -
设计模式(11)-享元模式及实现
当需要一个对象时,工厂会检查是否已经有相同内部状态的对象存在,如果存在则返回已有的对象,否则创建一个新的对象并将其添加到内部对象池中。它确保不会创建重复的享元对象,并且当客户端请求享元对象时,工厂会提供一个已经存在的对象或者创建一个新的对象。共享对象的状态,以减少内存和资源的消耗。● 限制:享元模式适用于对象的内部状态相对稳定,而外部状态会变化的情况。享元对象包含内部状态,这些状态是不变的,并且可以在多个对象之间共享。客户端通过享元工厂来获取所需的享元对象,并提供外部状态,以便享元对象能够执行特定的操作。原创 2024-06-20 00:15:57 · 309 阅读 · 0 评论 -
设计模式(10)-外观模式及实现
通过引入一个外观类(Facade),将复杂的子系统接口进行封装,为客户端提供一个简单的高层接口。外观类充当了客户端与子系统之间的中间人,处理客户端的请求并将其转发给适当的子系统。外观模式并不在系统中添加新功能,它只是提供了一个更简洁的接口,以简化客户端的操作。● 提高可维护性:由于外观模式将子系统封装起来,修改子系统的实现不会影响客户端代码,从而提高了系统的可维护性。● 支持松散耦合:外观模式可以帮助系统中的不同模块之间实现松散耦合,从而支持模块的独立开发和测试。原创 2024-06-19 09:56:25 · 302 阅读 · 0 评论 -
设计模式(9)-装饰模式及实现
装饰类具有与原始类相同的接口,它内部包含一个指向原始对象的引用,并且可以根据需要包装额外的功能。装饰模式的优点包括避免了类爆炸问题,因为你可以通过组合少量的装饰类来实现各种功能组合。3、Decorator(抽象装饰者):抽象类,实现Component接口,并持有Component接口的一个实例。4、ConcreteDecorator(具体装饰者):具体实现Decorator类,添加具体的职责。2、ConcreteComponent(具体组件):实现Component接口的具体类。原创 2024-06-18 22:26:24 · 127 阅读 · 0 评论 -
IDEA项目上传gitee
点击Define remote输入对应gitee仓库的URL。再次点击Push就可以上传到gitee仓库了。创建完成后,在项目路径中就会出现.git。2、接着将本地项目提交到远程仓库。首先准备好一个gitee仓库。首先选择指定的文件提交到仓库。接着push到远程仓库上去。1、首先创建本地仓库。原创 2024-06-15 14:53:47 · 286 阅读 · 0 评论 -
异或交换两数和中间变量temp交换两数对比
对比使用异或交换数组中两个数据和使用中间变量temp交换两数。原创 2024-06-13 21:03:12 · 248 阅读 · 0 评论