设计模式
文章平均质量分 69
大宝贱
介个.....不好说
展开
-
享元模式模式简介
它通过将对象的状态分为可共享的内部状态和不可共享的外部状态,来实现对象的共享。对象数量庞大且相似:当系统中存在大量相似的对象,并且这些对象的区别仅在于它们的内部状态时,可以考虑使用享元模式。内部状态和外部状态分离:将对象的状态分为内部状态和外部状态,内部状态可以共享,外部状态是独立的。对象池:通过维护一个对象池来管理可共享的对象,客户端从对象池中获取对象,并设置外部状态。分离内部状态和外部状态:内部状态可以共享,外部状态是独立的,客户端可以自行设置。提高性能:减少了创建相似对象的开销,提高了系统的性能。原创 2023-09-20 09:15:21 · 331 阅读 · 0 评论 -
模板方法模式简介
模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。该模式通过在抽象类中定义一个模板方法来控制算法的流程,并使用具体方法来实现其中的某些步骤。最后,在客户端代码中,我们可以通过创建不同的具体子类对象来调用模板方法。抽象父类中定义一个模板方法,并在其中调用多个抽象方法,子类必须实现这些抽象方法。在具体步骤中,如果有需要可选的操作,可以通过钩子方法来控制是否执行该操作。分别继承自抽象父类,并实现其中的抽象方法和钩子方法。定义了一个算法的骨架,将一些步骤延迟到子类中实现。原创 2023-09-01 10:15:00 · 582 阅读 · 0 评论 -
命令模式简介
通过使用命令模式,可以将请求发送方与接收方解耦,并且可以轻松地添加新的具体命令而无需修改现有代码。此外,由于每个具体的命令都是独立封装的对象,因此可以轻松地进行参数化配置和传递。命令模式是一种行为设计模式,它将请求封装成一个对象,从而允许您将不同的请求参数化、队列化,并且能够在不同的时间点执行。它维护一个命令队列,并提供添加命令和执行所有命令的方法。当调用执行所有命令的方法时,它会依次执行每个命令。创建具体命令类,实现抽象命令接口或继承抽象命令类,并在其中编写具体操作逻辑及其撤销逻辑。原创 2023-09-19 09:11:57 · 620 阅读 · 0 评论 -
解释器模式简介
创建具体的终结符号(Terminal Expression)和非终结符号(Non-terminal Expression)类,它们分别扩展了抽象表达式并实现了interpret()方法。)是一种行为型设计模式,它用于定义语言的文法,并解析和执行给定语言中的表达式。当需要灵活地处理不同类型的表达式,并且可以动态扩展和修改语法规则时,也适合使用解释器模式。当需要定义一种语言或规则,并且希望能够解析和执行该语言中的表达式时,可以使用解释器模式。通过使用面向对象技术,可以方便地添加新的表达式和操作符。原创 2023-09-18 14:15:57 · 400 阅读 · 0 评论 -
职责链模式简介
概念职责链模式是一种行为设计模式,它允许将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求为止。每个处理者都可以选择将请求传递给下一个处理者或自行处理。特点解耦发送者和接收者:发送者不需要知道具体的接收者,只需将请求发送给第一个处理者即可。动态组合:可以根据需要动态地组合和调整职责链中的各个节点。灵活性:可以灵活地添加、修改或删除职责链上的节点。优点提高代码复用性:每个节点都只关心自己负责的部分,易于扩展和维护。易于扩展新功能:通过增加新的节点来扩展功能而无需修改现有代码。原创 2023-09-15 10:40:19 · 175 阅读 · 0 评论 -
访问者模式简介
单分派方式的实现原理相对简单,但它有一个明显的缺点:每次新增具体元素类时,都需要在访问者接口和具体访问者类中添加对应的。这样会导致具体访问者类和抽象元素类之间的耦合增加,当元素和操作数量庞大时,维护起来可能会比较困难。通过将访问者对象传递给元素类,在元素类内部根据具体访问者类型调用对应方法。):该接口声明了多个重载方法,每个方法对应一个具体元素类,并且传入具体元素对象作为参数。需要对一个复杂对象结构中的元素进行不同类型的操作,而又不希望这些操作污染元素类。方法中根据传入的具体元素类型进行相应操作。原创 2023-09-13 09:36:23 · 270 阅读 · 0 评论 -
备忘录模式简介
该模式通过将对象的状态封装到备忘录中,并将其保存在一个管理者类中,从而实现了对对象状态的保存和恢复。当需要保存当前状态时,调用原始对象的创建备忘录方法,并将返回的备忘录存储在管理者中。当需要恢复到之前某个状态时,从管理者获取对应索引处的备忘录,并调用原始对象的恢复方法进行处理。当需要保存对象的部分状态,以便在后续操作中恢复到之前的状态时,可以考虑使用备忘录模式。原始对象:负责创建并记录当前状态,并提供恢复到某个备忘录状态的方法。备忘录:封装了原始对象的内部状态,并提供获取和设置内部状态的方法。原创 2023-09-12 14:16:46 · 229 阅读 · 0 评论 -
中介模式简介
中介者充当了多个对象之间的协调者,使得这些对象不需要直接相互通信,而是通过与中介者进行通信。当需要发送消息时,调用中介者的广播事件方法,在该方法内部遍历所有订阅器,并根据不同类型调用对应订阅器的处理方法。当某个对象需要发送消息时,调用中介者的广播事件方法,在该方法内部遍历所有订阅器,并根据不同类型调用对应订阅器的处理方法。创建具体的中介者类并实现抽象接口,在其中维护一个订阅器列表,并实现注册、解注册和广播事件等方法。降低了对象之间的耦合性:各个同事类只需要知道中介者对象,而无需了解其他同事类的具体细节。原创 2023-09-11 10:02:56 · 281 阅读 · 0 评论 -
代理模式简介
在编译时就已经确定了被代理类和具体的代理类,在代码中直接定义一个具体的实现类作为目标对象和一个对应的具体实现类作为代理对象。代理对象充当了客户端和目标对象之间的中介,可以在不改变目标对象的情况下增加额外的功能或限制访问。当客户端通过代理对象调用方法时,实际上会转发给真实对象的相应方法,并在前后执行额外操作。代理模式通过引入代理类来隐藏真实对象,并提供了与真实对象相同的接口,使得客户端无需直接与真实对象交互。的反射机制和字节码生成技术,在内存中创建一个新的代理类,并在运行时将方法调用转发给真实对象。原创 2023-09-08 09:23:39 · 516 阅读 · 0 评论 -
桥接模式简介
桥接模式是一种结构型设计模式,它将抽象和实现分离,使它们可以独立地变化。通过使用桥接模式,可以将一个类的抽象部分与其具体实现部分解耦,并且可以在运行时动态地选择不同的实现。通过将抽象化角色和具体实施者角色解耦,使得它们可以独立地进行扩展和修改。由于抽象化角色和具体实施者角色解耦,我们可以轻松地切换不同的具体实施者类来改变绘制效果。提供了更好的灵活性,在运行时能够动态地切换或替换具体实现。在主函数中,我们创建了两个不同颜色的圆形对象,并调用它们的。当希望将抽象和实现部分分离,以便独立进行扩展和修改时。原创 2023-09-07 09:44:16 · 330 阅读 · 0 评论 -
原型模式简介
可以观察到两个对象是独立的(因为引用地址不同),它们的列表也是独立的副本,所以对列表的修改不会相互影响。可以观察到两个对象不相等(因为引用地址不同),但是它们共享相同的引用类型字段(即列表),所以对列表的修改会同时影响两个对象。可以观察到两个对象是独立的,对一个对象的修改不会影响到另一个对象。可以观察到两个对象完全独立(因为引用地址不同),它们的列表也是独立的副本,所以对列表的修改不会相互影响。对于引用类型,在克隆过程中创建该引用类型的全新副本,并将副本赋值给新对象。类实现了原型注册表的功能。原创 2023-09-06 09:22:44 · 498 阅读 · 0 评论 -
外观模式简介
概念外观模式()是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,并将其封装在一个简单易用的接口中,使得客户端可以更方便地使用子系统。特点提供了一个简化和统一的接口,隐藏了底层子系统的复杂性。将客户端与子系统之间解耦,降低了客户端代码与子系统之间的直接依赖关系。通过外观类来集中管理和协调多个相关对象,提高了代码可维护性和灵活性。优点简化客户端与复杂子系统之间的交互过程。隐藏底层实现细节,提高代码可读性和可维护性。原创 2023-09-04 16:25:26 · 715 阅读 · 0 评论 -
迭代器模式简介
在实际应用中,可以根据需要使用不同类型的外部迭代器,例如自定义实现一个针对特定需求进行封装的外部迭代器类。客户端代码可以通过调用该方法获取到具体集合的内部迭代器,并使用循环遍历输出每个元素。在外部迭代器中,客户端代码通过手动调用迭代器的方法来遍历集合对象,并可以灵活地控制遍历顺序和跳过特定元素。在具体集合类中定义一个私有内部类作为具体的迭代器实现,并在该内部类中实现相关方法。在集合对象内部定义一个迭代器类,由集合对象主动调用迭代器的方法进行遍历。集合类中包含一个迭代器类并实现含获取迭代器的方法。原创 2023-09-03 15:41:21 · 400 阅读 · 0 评论 -
装饰器模式简介
这个装饰器持有一个指向基础组件对象的引用,并在其内部调用基础组件对象对应方法。这个装饰器持有一个指向基础组件对象的引用,并在其内部调用基础组件对象对应方法。最后,在客户端代码中,我们创建一个具体基础组件对象,并使用多个具体装饰器对象进行包裹和扩展。最后,在客户端代码中,我们创建一个具体基础组件对象,并使用多个具体装饰器对象进行包裹和扩展。,它也实现了相同的接口。这个装饰器持有一个指向基础组件对象的引用,并在其内部调用基础组件对象对应方法。,它也继承自基础组件类,并持有一个指向基础组件对象的引用。原创 2023-08-31 09:30:42 · 576 阅读 · 0 评论 -
建造者模式简介
它接收一个具体的建造者对象,并使用该建造者对象来逐步构建复杂对象。客户端通过创建指导者对象并将具体的建造者传入,然后调用指导者的构建方法来启动整个构建过程。在指导者类中定义一系列方法,用于按照特定顺序调用具体建造者对象的方法来构建复杂对象。持有一个具体的建造者对象,在其构造函数中传入,并通过调用它来控制整个构件过程。将构建代码与表示代码分离,使得相同的构建过程可以创建不同表示形式的对象。将对象的构建过程封装在指导者类中,使得客户端不必知道具体的构建细节。,其中包含了构建各个部分的方法和获取最终产品的方法。原创 2023-08-30 09:24:11 · 553 阅读 · 0 评论 -
策略模式简介
通过定义一个公共接口,所有具体策略类都要实现这个接口,并在上下文类中持有该接口类型的对象。在运行时,根据需要选择合适的具体策略对象,并调用其方法来执行相应的算法。通过使用策略模式,客户端可以在运行时选择不同的算法来解决问题。策略模式使用接口方式实现时,可能会导致代码膨胀,因为每个具体策略类都需要实现整个接口,即使某些方法对于特定的具体策略并不适用。在客户端代码中,可以根据需要创建不同的具体策略对象,并将其传递给上下文类进行执行。当有多个相关但不同实现方式的算法时,可以使用策略模式将这些算法封装成独立的类。原创 2023-08-29 16:40:25 · 1107 阅读 · 0 评论 -
适配器模式简介
创建一个适配器类(ClassAdapter),该类继承自适配者类并实现目标接口,通过继承关系同时具有了适配者和目标接口的特性。创建一个抽象适配器类(Adapter),该类实现了目标接口,并提供了默认的空方法实现,以便让子类选择性地覆盖需要的方法。使用对象适配器方式可以使得客户端能够通过目标接口调用到被适应对象的方法,从而实现了两个不兼容接口之间的协同工作。它允许不兼容的接口之间进行协同工作。使用类适配器方式可以使得客户端能够通过目标接口调用到被适应对象的方法,从而实现了两个不兼容接口之间的协同工作。原创 2023-08-28 14:39:17 · 1129 阅读 · 0 评论 -
工厂模式简介
是一种创建型设计模式,它提供了一种封装对象实例化过程的方式,客户端只需要关注接口或抽象类,并由工厂类根据具体需求返回相应的实例。工厂模式定义了一个抽象工厂和多个具体工厂,每个具体工厂负责创建特定类型的产品。创建一个简单工厂类,该类包含一个静态方法用于根据客户端传入的参数来创建相应的具体产品对象。创建多个具体产品族类,每个具体产品族类负责实现对应的抽象产品族接口。创建多个具体工厂类,每个具体工厂类负责创建特定类型的产品族对象。创建多个具体工厂类,每个具体工厂类负责创建特定类型的产品。原创 2023-08-27 15:08:59 · 429 阅读 · 0 评论 -
观察者模式简介
创建一个具体主题类(ConcreteSubject),该类继承自主题类,在具体主题中定义了相应的业务逻辑,并在合适的时机通过调用触发事件方法来通知所有注册的观察者。最后,在使用示例中,我们创建了一个具体主题对象和两个具体观察者对象,并将观察者注册到主题上。创建具体的主题类(ConcreteSubject),该类维护了一个观察者列表,并在状态改变时遍历通知所有注册的观察者。最后,我们创建了具体的观察者类。主题和观察者都实现相应接口,在主题中维护一个观察者列表,并在状态改变时遍历通知所有观察者。原创 2023-08-26 11:15:08 · 1099 阅读 · 0 评论 -
单例模式简介
静态内部类方式解决了双重检查锁存在的指令重排问题,并且没有加锁操作,因此性能较高。同时也能够保证线程安全性和懒加载特性。,并在静态代码块中进行初始化,可以保证该实例在类加载时就被创建。双重检查锁机制可以避免每次都加锁带来的性能损耗,在第一次判断为空后才进行同步操作,提高了性能。可能导致指令重排:在某些情况下,由于指令重排优化的存在,可能会导致多个线程同时通过第一次检查并进入临界区创建对象。可能导致资源浪费:如果该单例对象很大或者需要耗费较多资源,在应用启动阶段就创建可能会导致不必要的资源浪费。原创 2023-08-25 11:53:32 · 650 阅读 · 0 评论