设计模式
文章平均质量分 95
针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案。
好久不见的流星
一入外包深似海,从此大厂是路人。
展开
-
【Java 设计模式】行为型之中介者模式
中介者模式是一种行为型设计模式,用于通过一个中介对象来集中管理多个对象之间的交互关系,从而降低对象之间的耦合度。中介者模式通过将对象之间的通信委托给中介者,使得对象之间不直接相互通信,而是通过中介者来进行交互。中介者模式通常包含三个主要角色:抽象中介者(Abstract Mediator)、具体中介者(Concrete Mediator)、同事类(Colleague)。定义了中介者的接口,负责定义同事类之间的通信方法实现了抽象中介者的接口,负责管理和协调同事类之间的交互。原创 2024-01-27 00:00:00 · 1335 阅读 · 0 评论 -
【Java 设计模式】行为型之解释器模式
解释器模式是一种行为型设计模式,用于定义语言的文法规则,并提供解释器来解释符合规则的语句。解释器模式的核心思想是将语言的文法表示为一个解释器,并通过解释器来解释执行语句。解释器模式通常包含两个主要角色:抽象表达式(Abstract Expression)和具体表达式(Concrete Expression)。声明一个抽象的解释操作,由具体表达式来实现实现抽象表达式的解释操作,并对语句进行解释执行解释器模式是一种用于定义语言的文法规则,并提供解释器来解释执行语句的设计模式。原创 2024-01-27 00:00:00 · 768 阅读 · 0 评论 -
【Java 设计模式】行为型之模版方法模式
模板方法模式是一种行为型设计模式,用于定义算法的框架,并将一些步骤的实现延迟到子类。模板方法模式通过定义一个算法骨架,将具体步骤的实现推迟到子类,使得子类可以在不改变算法结构的情况下重定义算法的某些步骤。模板方法模式通常包含两个主要角色:抽象模板(Abstract Template)和具体模板(Concrete Template)。定义了算法的骨架,包含一些抽象的步骤,将具体步骤的实现延迟到子类实现了抽象模板中的具体步骤,完成算法的实际实现。原创 2024-01-26 00:00:00 · 950 阅读 · 0 评论 -
【Java 设计模式】行为型之迭代器模式
迭代器模式是一种行为型设计模式,用于提供一种顺序访问聚合对象中各个元素的方法,而不暴露聚合对象的内部表示。迭代器模式将遍历聚合对象的责任分离出来,使得聚合对象和遍历算法可以独立变化。迭代器模式通常包含两个主要角色:迭代器(Iterator)和具体聚合类(Concrete Aggregate)。定义了访问和遍历聚合对象元素的接口实现了创建迭代器的接口,返回一个能够遍历聚合对象元素的具体迭代器迭代器模式是一种用于提供一种顺序访问聚合对象中各个元素的方法的设计模式。原创 2024-01-26 00:00:00 · 789 阅读 · 0 评论 -
【Java 设计模式】行为型之备忘录模式
备忘录模式是一种行为型设计模式,用于捕获一个对象的内部状态,以便稍后可以将该对象恢复到此状态。备忘录模式允许在不破坏封装性的前提下捕获和外部化对象的内部状态。备忘录模式通常包含三个主要角色:原发器(Originator)、备忘录(Memento)和负责人(Caretaker)。负责创建备忘录对象,并在需要时将其状态恢复到备忘录所记录的状态存储原发器的内部状态,防止原发器以外的对象访问备忘录的内部状态负责保存备忘录对象,但不能修改备忘录的内容备忘录模式是一种用于保存和恢复对象状态的设计模式。原创 2024-01-25 00:00:00 · 840 阅读 · 0 评论 -
【Java 设计模式】行为型之访问者模式
访问者模式是一种行为型设计模式,用于在不改变被访问元素的类的前提下定义对这些元素的新操作。访问者模式的核心思想是将数据结构与作用于结构上的操作解耦,使得操作集合可以灵活变化而不影响元素的类。访问者模式通常包含两个主要角色:访问者(Visitor)和具体元素(Concrete Element)。定义了对具体元素进行访问的接口,每个具体访问者都实现了对应的访问操作定义了接受访问者的方法,并通过该方法调用访问者的访问操作访问者模式是一种用于在不改变被访问元素的类的前提下定义对这些元素的新操作的设计模式。原创 2024-01-25 00:00:00 · 1360 阅读 · 0 评论 -
【Java 设计模式】行为型之责任链模式
责任链模式是一种行为型设计模式,用于将请求发送者和接收者解耦,使得多个对象都有机会处理请求。责任链模式通过创建一个处理请求的链,将请求沿着链传递,直到有一个对象能够处理为止。责任链模式通常包含两个主要角色:抽象处理者(Abstract Handler)和具体处理者(Concrete Handler)。定义了一个处理请求的接口,可以包含一个指向下一处理者的引用实现了抽象处理者的接口,负责处理请求,同时可以决定是否将请求传递给下一处理者责任链模式是一种用于将请求发送者和接收者解耦的设计模式。原创 2024-01-24 00:00:00 · 1341 阅读 · 0 评论 -
【Java 设计模式】行为型之状态模式
状态模式是一种行为型设计模式,用于通过将对象的行为封装到不同的状态类中,使得对象在不同的状态下具有不同的行为。状态模式允许对象在内部状态发生改变时改变其行为,而无需修改其代码。状态模式通常包含三个主要角色:上下文(Context)、抽象状态(Abstract State)和具体状态(Concrete State)。定义了一个接口,用于维护一个当前状态的引用,并提供一个用于切换状态的方法定义了一个接口,用于封装与上下文相关的一个或多个行为实现了抽象状态的接口,负责处理与状态相关的行为。原创 2024-01-24 00:00:00 · 1435 阅读 · 0 评论 -
【Java 设计模式】行为型之命令模式
命令模式是一种行为型设计模式,用于将请求封装为对象,使得可以参数化客户端对象,并且能够排队、记录请求,以及支持撤销操作。命令模式的核心思想是将请求发送者和接收者解耦,通过命令对象来封装请求。命令对象包含了执行请求的方法,通过这种方式实现了请求的发起和执行的解耦。命令模式通常包含四个主要角色:命令(Command)、具体命令(Concrete Command)、命令发送者(Invoker)、命令接收者(Receiver)。声明了执行请求的接口实现了命令接口,对具体的请求进行了封装。原创 2024-01-23 00:00:00 · 1687 阅读 · 0 评论 -
【Java 设计模式】行为型之策略模式
策略模式是一种行为型设计模式,定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式允许客户端在运行时选择算法的具体实现,而不是在编译时固定使用某个算法。策略模式通常包含三个主要角色:环境(Context)、抽象策略(Strategy)和具体策略(ConcreteStrategy)。维护一个对抽象策略的引用,并在运行时可以切换不同的具体策略定义了一个算法族的接口,具体策略实现这个接口实现了抽象策略定义的接口,提供具体的算法实现。原创 2024-01-23 00:00:00 · 1865 阅读 · 0 评论 -
【Java 设计模式】行为型之观察者模式
观察者模式是一种行为型设计模式,用于定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。观察者模式通常包含两个主要角色:主题(Subject)和观察者(Observer)。维护一组观察者对象,提供添加、删除和通知观察者的方法。主题可以是具体的实现类或接口。定义了一个更新方法,用于在主题状态发生变化时接收通知和执行相应操作。观察者通常是一个接口,可以由具体的实现类来实现。观察者模式是一种用于定义对象间一对多的依赖关系的设计模式。原创 2024-01-22 00:00:00 · 1011 阅读 · 0 评论 -
【Java 设计模式】结构型之享元模式
享元模式是一种结构型设计模式,旨在减少对象的数量以节省内存和提高性能。享元模式通过共享大量相似对象的状态,使得这些对象可以共享,而不需要在每个对象中都存储相同的数据。享元模式通常包含两个主要部分:享元接口和具体享元。定义了具体享元类需要实现的接口,通常包含一个方法用于接受外部状态。实现了享元接口,并存储了共享的内部状态。具体享元对象的外部状态通常通过方法参数传递进来。享元模式是一种用于减少对象数量、提高系统性能的设计模式。原创 2024-01-22 00:00:00 · 921 阅读 · 0 评论 -
【Java 设计模式】结构型之外观模式
外观模式是一种结构型设计模式,它为复杂系统提供了一个简化的接口,隐藏了系统的复杂性,使得客户端更容易使用系统。外观模式通过创建一个包装类(外观类),将系统的复杂性封装起来,对客户端提供一个简单的接口。外观模式通常包含三个主要角色:外观类(Facade)、子系统类(Subsystem)和客户端(Client)。提供了一个简化的接口,封装了对子系统的调用。实现了系统的功能,由外观类调用。调用外观类来简化系统的使用,无需直接与子系统交互。原创 2024-01-21 00:00:00 · 754 阅读 · 0 评论 -
【Java 设计模式】结构型之代理模式
代理模式是一种结构型设计模式,它允许通过一个代理对象控制对其他对象的访问。代理模式引入了一定程度的间接性,使得可以在访问对象前后进行一些额外的操作。代理模式通常包含三个主要角色:抽象主题(Subject)、真实主题(RealSubject)和代理(Proxy)。定义了真实主题和代理的共同接口,可以是接口或抽象类。实现了抽象主题接口,是代理模式中的真实对象。实现了抽象主题接口,包含一个指向真实主题的引用,可以控制对真实主题的访问。原创 2024-01-21 00:00:00 · 1418 阅读 · 2 评论 -
【Java 设计模式】结构型之装饰器模式
装饰器模式是一种结构型设计模式,它允许在不改变对象接口的情况下,动态地将责任附加到对象上。装饰器模式通过创建一个包装对象(装饰器)来实现,这个包装对象包含了原始对象,并在原始对象的基础上添加了新的功能。装饰器模式通常包含四个主要角色:抽象组件(Component)、具体组件(ConcreteComponent)、抽象装饰器(Decorator)和具体装饰器(ConcreteDecorator)。定义了被装饰对象的接口实现了抽象组件接口,是被装饰的具体对象继承自抽象组件,并包含一个指向抽象组件的引用。原创 2024-01-20 00:00:00 · 1120 阅读 · 0 评论 -
【Java 设计模式】结构型之组合模式
组合模式是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式允许客户端统一处理单个对象和对象组合,无需区分它们之间的差异。组合模式通常包含三个主要角色:组件(Component)、叶子(Leaf)和容器(Composite)。定义了组合中的对象的共同接口,可以是抽象类或接口是组合中的叶子节点,实现了组件接口是组合中的容器节点,可以包含其他组件或容器组合模式是一种强大的设计模式,通过将对象组合成树形结构,使得客户端可以统一处理单个对象和对象组合。原创 2024-01-20 00:00:00 · 951 阅读 · 0 评论 -
【Java 设计模式】结构型之桥接模式
桥接模式是一种结构型设计模式,它通过将抽象部分和实现部分分离,使得它们可以独立地变化。桥接模式的核心思想是通过聚合而不是继承来连接不同的抽象和实现。桥接模式通常包含四个主要角色:抽象类(Abstraction)、扩展抽象类(RefinedAbstraction)、实现接口(Implementor)和具体实现类(ConcreteImplementor)。定义抽象部分的接口,并包含一个指向实现接口的引用对抽象类的扩展,通常用于添加额外的功能或修改抽象部分的行为定义实现部分的接口,提供基本的操作。原创 2024-01-19 00:00:22 · 1131 阅读 · 0 评论 -
【Java 设计模式】结构型之适配器模式
适配器模式是一种结构型设计模式,它允许一个接口转换成另一个接口。它允许原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式通常包含三个主要角色:目标接口(Target)、被适配者(Adaptee)、适配器(Adapter)。客户端期望的接口,适配器将被适配者适配成这个接口需要被适配的类或接口,它与目标接口不兼容通过实现目标接口并包装被适配者,使得被适配者的接口能够被客户端调用适配器模式是一种在面对不同接口的系统集成中非常有用的设计模式。原创 2024-01-19 00:00:03 · 1189 阅读 · 0 评论 -
【Java 设计模式】创建型之原型模式
原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需知道其具体实现。在原型模式中,一个原型接口定义了一个克隆方法,而具体原型类实现了该克隆方法,从而允许通过复制现有对象的方法来创建新对象。原型模式是一种灵活且实用的设计模式,通过合理使用,可以提高系统的扩展性和性能。在实际开发中,可以根据需求选择适当的原型模式实现,确保系统具有良好的可维护性和可扩展性。原创 2024-01-18 01:00:00 · 1136 阅读 · 0 评论 -
【Java 设计模式】创建型之建造者模式
建造者模式是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的核心思想是将一个复杂对象的构建过程封装在一个指导者类中,由多个建造者类负责具体的构建步骤。客户端通过指导者类调用建造者的方法来完成对象的构建。建造者模式是一种常见且实用的设计模式,它通过将一个复杂对象的构建与其表示分离,使得构建过程可以创建不同的表示。在实际开发中,建造者模式常用于构建复杂对象,避免构造器参数过多导致构造器方法签名冗长的情况。原创 2024-01-17 00:00:20 · 1630 阅读 · 0 评论 -
【Java 设计模式】创建型之抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式将一组相关的产品组合成一个工厂,客户端通过工厂接口创建一系列产品。这有助于实现产品族的概念,其中产品族是指一组相关的产品,例如不同品牌的汽车。抽象工厂模式是一种常见且实用的设计模式,它通过定义一个工厂接口,将一系列相关或相互依赖的对象的创建延迟到具体工厂的实现类中,从而实现了客户端和具体类的解耦。在实际开发中,抽象工厂模式常用于创建一系列相关的产品,如美食店中的可乐、汉堡包等。原创 2024-01-17 00:00:05 · 1363 阅读 · 0 评论 -
【Java 设计模式】创建型之工厂方法模式
工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是将对象的实例化延迟到子类中。这样,在实际使用时,客户端代码不需要关心具体实例是哪个类,只需通过工厂方法获取对象即可。工厂方法模式通过解耦了客户端和具体类的关系,使系统更加灵活。工厂方法模式是一种常见且实用的设计模式,它通过定义一个工厂方法接口,将对象的实例化延迟到子类中,从而实现了客户端和具体类的解耦。在实际开发中,工厂方法模式常用于创建复杂对象、管理对象的生命周期等场景。通过灵活使用工厂方法模式,可以使系统更容易扩展和维护。原创 2024-01-15 00:00:00 · 2118 阅读 · 0 评论 -
【Java 设计模式】创建型之单例模式
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点,使得这个实例可以被全局范围内的代码所访问。单例模式的主要目的是控制某个类的实例数量,确保在整个应用程序中只有一个实例存在。单例模式是一种常见且实用的设计模式,它可以确保在整个应用程序中只有一个实例存在。在选择懒汉式或饿汉式实现方式时,需要根据具体的需求和性能考虑来选择合适的方式。在实际开发中,单例模式通常用于管理共享资源、配置信息等全局唯一的对象。通过合理使用单例模式,可以提高系统的灵活性和可维护性。原创 2024-01-15 00:00:00 · 1197 阅读 · 0 评论 -
【Java 设计模式】设计原则之迪米特法则
迪米特法则是由荷兰计算机科学家伊恩·荷尔姆·迪米特(Ian Holland Demeter)于1987年提出的。它规定一个对象应该对其他对象有最少的了解,即一个类不应该知道太多关于其他类的内部细节。迪米特法则有一个简洁的表述:“只与你的直接朋友通信,不跟陌生人说话”,其中“直接朋友”指的是当前对象的成员、方法参数、方法返回值中的对象。迪米特法则是一项有助于降低类之间耦合性的基本原则。通过遵循这一原则,我们可以创建更加灵活、可维护和可扩展的面向对象系统。原创 2024-01-13 00:15:00 · 1326 阅读 · 0 评论 -
【Java 设计模式】设计原则之合成聚合复用原则
合成/聚合复用原则是由Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides等人在《设计模式:可复用面向对象软件的基础》一书中提出的。它指导开发人员在设计中使用合成和聚合来建立对象之间的关系,而不是通过继承。合成/聚合复用原则是一个有助于构建灵活、可维护、可复用软件的基本原则。通过避免过度使用继承,使用合成和聚合来组合对象,我们能够创建更具弹性的系统,更容易适应变化。在实际项目中,开发人员应时刻关注如何设计对象之间的关系,使得系统更具灵活性和可维护性。原创 2024-01-13 00:00:00 · 1062 阅读 · 0 评论 -
【Java 设计模式】设计原则之接口隔离原则
接口隔离原则是由罗伯特·C·马丁(Robert C. Martin)提出的,它规定一个类不应该被强迫依赖它不使用的接口。换句话说,一个类应该只依赖于它需要使用的接口。这有助于避免类与不相关的接口发生耦合,减少类之间的依赖关系,提高系统的灵活性。接口隔离原则是面向对象设计中一个基础而重要的原则,它有助于创建灵活、可维护和可扩展的代码。通过定义小而专注的接口,避免强迫性实现,使用适配器模式等方式,我们能够降低类之间的耦合性,提高系统的灵活性。原创 2024-01-12 00:03:04 · 1077 阅读 · 0 评论 -
【Java 设计模式】设计原则之依赖倒置原则
依赖倒置原则是由罗伯特·C·马丁(Robert C. Martin)提出的,它规定高层模块不应该依赖于低层模块,而是应该依赖于抽象。这意味着高层模块和低层模块都应该依赖于共同的抽象。抽象不应该依赖于具体实现,而具体实现应该依赖于抽象。这有助于减少模块之间的耦合,提高系统的灵活性。依赖倒置原则是面向对象设计中一个基本而重要的原则,它有助于创建灵活、可维护、可扩展的代码。通过定义抽象、依赖于抽象并通过依赖注入传递依赖关系,我们能够降低模块之间的耦合性,提高系统的灵活性。原创 2024-01-12 00:02:40 · 1090 阅读 · 0 评论 -
【Java 设计模式】设计原则之里氏替换原则
里氏替换原则是由计算机科学家芭芭拉·利斯科夫(Barbara Liskov)于1987年提出的。该原则定义如下:如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。换句话说,里氏替换原则要求子类型必须能够替换掉它们的父类型,而程序在使用父类型和子类型时不应该产生意外的行为。里氏替换原则是面向对象设计中一个基本而重要的原则,它有助于创建灵活、可维护、可扩展的代码。原创 2024-01-11 00:00:00 · 889 阅读 · 0 评论 -
【Java 设计模式】设计原则之开放封闭原则
开放/封闭原则是由伯特兰·梅耶尔(Bertrand Meyer)首次提出的,它规定软件实体应该是可以扩展的,但是不可修改的。换句话说,一个模块的行为应该可以通过扩展来进行改变,而不是通过修改已有的代码。这有助于保持系统的稳定性,减少对已有代码的影响。开放/封闭原则是面向对象设计中一个基础而重要的原则,它有助于创建稳定、可维护、可扩展的代码。通过遵循这一原则,我们可以更容易地适应变化,减少系统的复杂性,并提高代码的质量。原创 2024-01-11 00:00:00 · 853 阅读 · 0 评论 -
【Java 设计模式】设计原则之单一职责原则
单一职责原则是由罗伯特·C·马丁(Robert C. Martin)提出的,它规定一个类应该只有一个引起变化的原因。换句话说,一个类应该只有一个职责。如果一个类负责太多的事情,那么一旦需求变化,可能需要修改该类的多个部分,增加了代码的复杂性,也增加了引入错误的风险。单一职责原则是面向对象设计中一个基本且重要的原则,它有助于创建清晰、可维护、可扩展的代码。通过确保每个类只有一个职责,我们可以降低代码的复杂性,提高代码的质量。原创 2024-01-10 00:00:00 · 1437 阅读 · 0 评论 -
【Java 设计模式】设计原则
在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。在设计模式的世界中,这些设计原则是不可或缺的。在本文中,我们将介绍一些常见的设计原则,并了解它们在实际应用中的价值。原创 2024-01-09 00:15:00 · 1190 阅读 · 0 评论 -
【Java 设计模式】23 种设计模式
设计模式是在软件设计中经常出现的问题的解决方案,它们是经验丰富的开发人员通过时间和实践总结出来的最佳实践。在 Java 中,我们有幸继承了许多经典的设计模式,其中最著名的是《设计模式:可复用面向对象软件的基础》一书中总结的 23 种设计模式。这些设计模式可以分为三大类:创建型模式、结构型模式和行为型模式,本文我们将简要概述一下这些设计模式。原创 2024-01-09 00:00:00 · 1055 阅读 · 0 评论