
设计模式
文章平均质量分 76
xinyi_java
热衷于编写代码,热衷于bug修复,热衷于强化自身技术,yxtp.love
展开
-
设计模式-代表性模式
设计模式是在软件设计中经常使用的经验总结和最佳实践。它们提供了一种通用的解决方案,用于解决常见的设计问题,并促进代码的可重用性、可维护性和灵活性。原创 2024-01-09 09:45:58 · 858 阅读 · 0 评论 -
行为型模式-命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而使得可以用不同的请求对客户端进行参数化,同时支持将请求排队、记录日志、撤销等操作。通过命令模式,可以实现请求发送者和请求接收者之间的解耦,提高代码的灵活性和可维护性。命令模式还可以支持命令的撤销、排队、记录日志等高级功能,使得系统更加可靠和可扩展。命令接口定义了执行请求的方法,具体命令类实现了命令接口,负责具体的请求处理逻辑。由于命令对象封装了请求的具体操作,可以轻松实现命令的撤销和恢复功能。原创 2024-01-09 09:23:02 · 402 阅读 · 0 评论 -
行为型模式-职责链模式
是具体处理者,客户端通过创建具体处理者对象,并设置它们的下一个处理者,将它们串成一条处理链。当有请求需要处理时,客户端将请求发送给链的第一个处理者,每个处理者判断自己是否能够处理请求,如果能够处理则处理请求并结束,否则将请求传递给下一个处理者。具体处理者实现了抽象处理者的接口,并负责具体的请求处理逻辑。职责链模式将请求发送者和接收者解耦,使得发送者无需知道请求被谁处理,接收者也无需知道请求的发送者是谁。可以随时在链中添加新的处理者对象,或者修改现有处理者的顺序,从而灵活地扩展和调整处理链。原创 2024-01-09 09:22:44 · 447 阅读 · 0 评论 -
行为型模式-状态模式
状态模式将对象的状态封装成不同的状态类,并通过状态类之间的切换来改变对象的行为。当环境类的状态发生改变时,它会更新当前状态对象,并将行为委托给新的状态对象。通过状态模式,可以根据对象的内部状态来改变其行为,实现对象的状态与行为的分离。抽象状态类定义了状态对象的接口,具体状态类实现了抽象状态类的接口,负责具体的状态行为。状态模式将对象的状态封装成不同的状态类,使得状态与行为分离,每个状态类只需要关注自身的行为,简化了对象的维护和扩展。状态模式将状态转换逻辑集中到具体状态类中,使得状态转换变得更加明确和可控。原创 2024-01-09 09:22:23 · 376 阅读 · 0 评论 -
行为型模式-访问者模式
具体访问者类实现了访问者接口的方法,具体元素类实现了元素接口的方法,并在其中调用访问者的方法。通过访问者模式,客户端可以通过不同的访问者访问不同的元素,并执行不同的操作。访问者定义了对每个具体元素的访问操作,具体访问者实现了访问者定义的操作逻辑。元素定义了接受访问者访问的方法,具体元素实现了元素定义的方法。由于访问者模式将操作封装在具体访问者中,因此增加新的操作只需要增加一个新的具体访问者类,无需修改元素类的代码。访问者模式可以很方便地扩展新的访问操作,对于元素类的修改是封闭的。原创 2024-01-09 09:21:54 · 398 阅读 · 0 评论 -
行为型模式-迭代器模式
客户端通过创建具体聚合对象,并添加元素到聚合对象中,然后通过调用聚合对象的创建迭代器方法获取一个迭代器对象。迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种顺序访问聚合对象中各个元素的方法,而不需要暴露聚合对象的内部表示。迭代器定义了访问和遍历元素的接口,聚合对象提供创建迭代器的方法,用于返回迭代器对象。客户端通过迭代器的统一接口访问聚合对象中的元素,无需关心聚合对象的内部结构和实现细节。迭代器模式将聚合对象的遍历行为封装到迭代器中,使得聚合对象可以独立于具体的遍历算法。原创 2024-01-08 16:59:15 · 413 阅读 · 0 评论 -
行为型模式-策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装到独立的类中,使得它们可以互相替换。上下文是使用算法的类,它持有一个策略对象,并在运行时调用策略对象的算法;策略接口定义了算法的统一接口,所有具体策略都实现了策略接口,具体策略类封装了具体的算法。客户端通过创建不同的具体策略对象,并将其设置到上下文中,然后调用上下文的执行方法来执行相应的算法。策略模式将算法封装到独立的类中,使得算法的变化不会影响到使用算法的客户端。策略模式由三个核心角色组成:上下文(原创 2024-01-08 16:58:32 · 412 阅读 · 0 评论 -
行为型模式-观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。通过观察者模式,可以实现对象之间的解耦,主题和观察者之间的关系是动态的,可以随时进行注册和移除。客户端通过创建主题和观察者,并将观察者注册到主题中,当主题的消息发生变化时,观察者会收到通知并进行相应的更新。观察者定义了接收和处理主题通知的方法。主题和观察者之间的依赖关系是松耦合的,它们可以独立地进行扩展和修改,不会相互影响。原创 2024-01-08 16:57:39 · 408 阅读 · 0 评论 -
结构型模式-组合模式
组合模式使得用户可以统一处理单个对象和组合对象,无需区分它们之间的差异,从而简化了客户端的代码。组合模式的核心思想是通过抽象类或接口来定义组合对象和叶子对象的公共操作,并在组合对象中维护一个子对象的集合。通过组合模式,可以将单个对象和组合对象统一对待,简化了客户端的代码。组合组件是组合对象的类,它可以包含其他组合对象或叶子对象作为其子对象。客户端无需区分组合对象和叶子对象,统一使用组件类的接口进行操作,简化了客户端的代码。组件是组合对象和叶子对象的抽象类或接口,它定义了组合对象和叶子对象的公共操作。原创 2024-01-08 16:37:43 · 387 阅读 · 0 评论 -
结构型模式-享元模式
它维护了一个享元池(Flyweight Pool)用于存储已经创建的享元对象,并根据客户端的请求返回相应的享元对象。享元对象分为内部状态和外部状态,内部状态由享元对象自身管理和维护,而外部状态需要在使用时传入。客户端使用享元对象时,需要提供外部状态,并将外部状态传递给享元对象。客户端通过享元工厂获取享元对象,并提供外部状态,享元对象根据外部状态进行处理。享元模式将对象的状态分为内部状态和外部状态,简化了对象的结构,提高了系统的可维护性。通过共享享元对象的内部状态,减少了重复创建相似对象的内存消耗。原创 2024-01-08 16:36:47 · 371 阅读 · 0 评论 -
结构型模式-外观模式
外观模式通过定义一个高层接口,简化了客户端与子系统之间的交互,使得客户端可以更加方便地使用子系统的功能。外观模式的核心思想是通过引入一个外观类,将客户端与子系统之间的复杂交互过程封装起来,对外提供一个简单的接口。外观类充当了客户端与子系统之间的中间层,隐藏了子系统的复杂性,使得客户端只需要与外观类进行交互即可。通过外观模式,可以简化客户端与子系统之间的交互,隐藏子系统的复杂性。子系统可以包含多个类,但对于外观类来说,子系统的复杂性被封装在子系统内部,对客户端来说是透明的。客户端通过调用外观类的。原创 2024-01-08 16:35:43 · 358 阅读 · 0 评论 -
结构型模式-桥接模式
抽象部分定义了高层的抽象接口,实现部分定义了底层的实现接口。通过将抽象部分和实现部分分离,它们可以独立地进行变化和扩展。通过桥接模式,可以将抽象部分和实现部分分离,使它们可以独立地进行变化和扩展。抽象部分的方法可以调用实现部分的方法,也可以包含一些自己的业务逻辑。客户端通过抽象部分的接口调用抽象部分的方法,抽象部分再通过实现部分的接口调用实现部分的方法。扩展的抽象部分可以通过调用抽象部分的方法来访问实现部分。定义了底层的实现接口,实现部分的方法可以被抽象部分和扩展的抽象部分调用。原创 2024-01-08 16:34:07 · 433 阅读 · 0 评论 -
结构型模式-代理模式
代理模式通过在代理对象和目标对象之间添加一个中间层,可以实现对目标对象的间接访问,从而控制和管理对目标对象的访问方式和权限。通过代理模式,代理对象可以在访问目标对象前后执行一些额外的操作,例如判断目标对象是否已创建、缓存已创建的目标对象等。代理模式的主要思想是通过引入一个代理对象来代替原始对象,客户端通过代理对象间接地访问目标对象。代理对象和目标对象实现相同的接口,使得客户端无需知道实际的目标对象,而是通过代理对象来进行访问。目标对象是代理对象所代表的真实业务对象。客户端通过代理对象访问目标对象的。原创 2024-01-08 16:33:03 · 375 阅读 · 0 评论 -
结构型模式-装饰器模式
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变原有对象结构的情况下,动态地向对象添加额外的功能和行为。装饰器模式的主要思想是将对象的行为分离为核心功能和附加功能,并通过组合的方式将它们组合在一起。抽象装饰器通常也实现了抽象组件的方法,并在方法中调用具体组件的对应方法。通过装饰器模式,可以动态地向对象添加额外的功能,而不会影响原有对象的结构和行为。客户端代码通过装饰器将额外的功能(牛奶和糖)添加到原有的咖啡对象上,从而增强了咖啡的描述和成本。它定义了核心功能的具体实现。原创 2024-01-08 16:31:18 · 931 阅读 · 0 评论 -
结构型模式-适配器模式
适配器是实现目标接口的类。它包含一个对被适配对象的引用,并将被适配对象的接口转换为目标接口,以便客户端可以通过适配器使用被适配对象的功能。通过适配器模式,客户端可以使用适配器对象调用目标接口的方法,而不需要直接与被适配对象交互,从而实现了接口之间的兼容和解耦。被适配对象是已有的接口,它的功能与目标接口不兼容。在客户端代码中,通过适配器对象调用目标接口的方法,适配器会将方法调用转发给被适配对象,从而实现了对。在客户端代码中,通过适配器对象调用目标接口的方法,适配器会将方法调用转发给被适配对象,从而实现了对。原创 2024-01-08 16:29:16 · 369 阅读 · 0 评论 -
创建型模式-原型模式
通过原型模式,我们可以通过克隆已有对象来创建新对象,避免了昂贵的创建操作,并且可以动态地添加或删除原型对象。通过原型模式,我们可以通过克隆已有对象来创建新对象,避免了昂贵的创建操作,并且可以动态地添加或删除原型对象。因此,在修改克隆对象的引用类型字段时,需要注意对原型对象和克隆对象的影响。原型模式是一种创建型设计模式,其目的是通过克隆已有对象来创建新的对象,而无需使用昂贵的创建操作。是原型管理器类,用于管理原型对象。通过原型模式,可以在运行时动态地添加或删除原型对象,从而影响到克隆对象的创建。原创 2024-01-08 14:59:41 · 443 阅读 · 0 评论 -
创建型模式-建造者模式
建造者模式的核心思想是将对象的构建与表示分离,以便相同的构建过程可以创建不同的表示。类中,我们创建了指挥者对象和具体建造者对象,并通过指挥者调用具体建造者的方法来构建不同配置的电脑对象。类中,我们创建了指挥者对象和具体建造者对象,并通过指挥者调用具体建造者的方法来构建不同配置的电脑对象。通过建造者模式,我们可以使用相同的构建过程来创建不同配置的电脑对象,而无需直接实例化具体的产品类,使得构建过程更加灵活和可复用。定义了构建复杂对象的方法。是具体建造者类,实现了抽象建造者接口,负责实际构建电脑对象的过程。原创 2024-01-08 13:59:27 · 1022 阅读 · 0 评论 -
创建型模式-抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种创建一组相关或相互依赖对象的接口,而无需指定具体的类。这样,通过抽象工厂模式,我们可以根据当前操作系统选择不同的工厂,而无需在客户端代码中直接实例化具体的产品类。这样,通过抽象工厂模式,我们可以根据当前操作系统选择不同的工厂,而无需在客户端代码中直接实例化具体的产品类。总的来说,抽象工厂模式提供了一种创建一组相关对象的接口,隐藏了具体产品的实现细节,使客户端代码与具体产品解耦。它实现了抽象工厂中定义的创建相关对象的方法,并负责实例化具体的产品对象。原创 2024-01-08 13:46:42 · 824 阅读 · 0 评论 -
创建型模式-单例模式
单例模式是一种创建型设计模式,用于确保类只有一个实例,并提供全局访问点以获取该实例。需要注意的是,滥用单例模式可能导致代码的可测试性和可扩展性降低,增加了代码的耦合度。懒汉式单例在首次访问时创建实例,可能会引发并发访问的问题。如果单例类需要实现序列化接口,需要注意在反序列化时如何保持单例的唯一性。在多线程环境下,需要确保单例对象的创建是线程安全的,避免出现竞态条件。单例模式适用于需要在整个系统中记录日志的情况,确保只有一个日志实例。单例模式适用于需要在整个系统中记录日志的情况,确保只有一个日志实例。原创 2024-01-08 13:53:02 · 378 阅读 · 0 评论 -
创建型模式-工厂模式
工厂模式将对象的实例化过程封装在一个工厂类中,客户端只需通过调用工厂类的方法来获取所需的对象。它可以有多个不同的具体工厂实现类,每个具体工厂实现类负责创建一组具体的产品。通过使用工厂模式,客户端可以通过调用工厂的方法来创建不同类型的汽车对象,而不需要直接与具体的产品类交互,从而实现了解耦和灵活性。通过使用工厂模式,客户端可以通过调用工厂的方法来创建不同类型的汽车对象,而不需要直接与具体的产品类交互,从而实现了解耦和灵活性。它负责实现抽象工厂中定义的方法,根据客户端的请求来创建具体的产品对象。原创 2024-01-08 13:45:07 · 1265 阅读 · 0 评论