适合小白学习的设计模式教程 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 适合小白学习的设计模式教程

适合小白学习的设计模式教程

更新时间:2021-10-18 12:21:51 来源:极悦 浏览924次

设计模式在软件开发人员中非常流行。设计模式是对常见软件问题的详细描述的解决方案

适合小白学习的设计模式教程

Java设计模式

使用设计模式的一些好处是:

设计模式已经定义并提供了行业标准方法来解决重复出现的问题,因此如果我们明智地使用设计模式可以节省时间。我们可以在基于 Java 的项目中使用许多 Java 设计模式。

使用设计模式可提高可重用性,从而产生更健壮和高度可维护的代码。它有助于降低软件产品的总拥有成本 (TCO)。

由于已经定义了设计模式,它使我们的代码易于理解和调试。它可以加快开发速度,并且团队的新成员很容易理解它。

Java设计模式分为三类——创建型、结构型和行为型设计模式。

创建型设计模式

创建型设计模式提供了针对特定情况以最佳方式实例化对象的解决方案。

1.单例模式

单例模式限制类的实例化,并确保 Java 虚拟机中只存在类的一个实例。它看起来是一个非常简单的设计模式,但是当涉及到实现时,它会带来很多实现问题。单例模式的实现一直是开发者之间有争议的话题。查看单例设计模式以了解实现单例模式的不同方法以及每种方法的优缺点。这是讨论最多的 Java 设计模式之一。

2.工厂​​模式

当我们有一个具有多个子类的超类并且基于输入,我们需要返回一个子类时,使用工厂设计模式。这种模式将类实例化的责任从客户端程序转移到工厂类。我们可以在 Factory 类上应用单例模式或将工厂方法设为静态。

3.抽象工厂模式

抽象工厂模式类似于工厂模式,它是一个工厂的工厂。如果您熟悉 java 中的工厂设计模式,您会注意到我们有一个 Factory 类,它根据提供的输入返回不同的子类,并且工厂类使用 if-else 或 switch 语句来实现这一点。

在抽象工厂模式中,我们摆脱了 if-else 块,为每个子类创建了一个工厂类,然后是一个抽象工厂类,它将根据输入的工厂类返回子类。查看抽象工厂模式以了解如何使用示例程序实现此模式。

4.建造者模式

引入这种模式是为了解决当对象包含大量属性时工厂和抽象工厂设计模式的一些问题。构建器模式通过提供一种逐步构建对象的方法并提供实际返回最终对象的方法,解决了大量可选参数和不一致状态的问题。查看Builder Pattern,了解 JDK 中使用的示例程序和类。<

5.原型模式

当对象创建是一件代价高昂的事情并且需要大量时间和资源并且您已经存在类似的对象时,使用原型模式。所以这个模式提供了一种机制,可以将原始对象复制到一个新对象,然后根据我们的需要进行修改。此模式使用 java 克隆来复制对象。

原型设计模式要求您正在复制的对象应提供复制功能。它不应该由任何其他类完成。然而,是使用Object 属性的浅拷贝还是深拷贝取决于需求,这是一个设计决定。

结构设计模式

结构模式提供了创建类结构的不同方法,例如使用继承和组合从小对象创建大对象。

1. 适配器模式

适配器设计模式是结构设计模式之一,它用于使两个不相关的接口可以一起工作。连接这些不相关接口的对象称为适配器。作为现实生活中的例子,我们可以将移动充电器视为适配器,因为移动电池需要 3 伏才能充电,但普通插座产生 120V(美国)或 240V(印度)。因此,移动充电器充当移动充电插座和壁式插座之间的适配器。

2. 复合模式

复合模式是结构设计模式之一,当我们必须表示部分-整体层次结构时使用。当我们需要以一种必须以相同方式处理结构中的对象的方式创建结构时,我们可以应用复合设计模式。

3. 代理模式

代理模式的意图是“为另一个对象提供代理或占位符以控制对其的访问”。定义本身非常清晰,当我们想要提供对功能的受控访问时使用代理模式。

假设我们有一个可以在系统上运行某些命令的类。现在,如果我们正在使用它,那很好,但是如果我们想将此程序提供给客户端应用程序,它可能会出现严重问题,因为客户端程序可以发出命令来删除一些系统文件或更改一些您不想要的设置. 查看带有实现细节的示例程序的代理模式帖子。

4.享元模式

当我们需要创建一个类的大量对象时,使用享元设计模式。由于每个对象都消耗对低内存设备(例如移动设备或嵌入式系统)至关重要的内存空间,因此可以应用享元设计模式通过共享对象来减少内存负载。java中的字符串池实现是享元模式实现的最好例子之一。

5. 外观图案

Facade Pattern 用于帮助客户端应用程序轻松地与系统交互。假设我们有一个应用程序有一组接口来使用 MySql/Oracle 数据库并生成不同类型的报告,例如 HTML 报告、PDF 报告等。所以我们将有一组不同的接口来处理不同类型的数据库. 现在,客户端应用程序可以使用这些接口来获取所需的数据库连接并生成报告。但是当复杂度增加或接口行为名称混乱时,客户端应用程序会发现很难管理它。所以我们可以在这里应用 Facade 模式,并在现有接口之上提供一个包装器接口来帮助客户端应用程序。查看Facade Pattern帖子以获取实现细节和示例程序。

6. 桥接模式

当我们在接口和实现中都有接口层次结构时,桥接设计模式用于将接口与实现分离,并向客户端程序隐藏实现细节。与适配器模式一样,它是结构设计模式之一。

桥接设计模式的实现遵循更喜欢组合而不是继承的概念。

行为设计模式

行为模式为对象之间更好的交互以及如何提供失去耦合和灵活性以轻松扩展提供了解决方案。

1. 模板方法模式

模板方法是一种行为设计模式,用于创建方法存根并将一些实现步骤推迟到子类。模板方法定义了执行算法的步骤,它可以提供一个默认实现,该实现可能对所有或部分子类都是通用的。

2. 中介模式

中介者设计模式用于在系统中的不同对象之间提供集中的通信媒介。中介器设计模式在多个对象相互交互的企业应用程序中非常有用。如果对象之间直接交互,系统组件之间是紧密耦合的,这使得可维护性成本更高,并且不容易灵活扩展。中介者模式专注于为对象之间的通信提供中介者,帮助实现对象间的解耦。

空中交通管制员是中介模式的一个很好的例子,其中机场控制室充当不同航班之间通信的中介。中介者充当对象之间的路由器,它可以拥有自己的逻辑来提供一种通信方式。

3.责任链模式

责任链模式用于在软件设计中实现松散耦合,其中来自客户端的请求被传递到对象链以处理它们。然后链中的对象将决定谁将处理请求以及是否需要将请求发送到链中的下一个对象。

我们知道在一个 try-catch 块代码中可以有多个 catch 块。这里的每个 catch 块都是处理该特定异常的处理器。所以当 try 块中发生异常时,它会被发送到第一个 catch 块进行处理。如果 catch 块无法处理它,它会将请求转发到链中的下一个对象,即下一个 catch 块。如果即使是最后一个 catch 块也无法处理它,则异常会被抛出到调用程序的链外。

4.观察者模式

当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式非常有用。在观察者模式中,监视另一个对象状态的对象称为Observer,正在监视的对象称为Subject。

Java 通过 java.util.Observable 类和 java.util.Observer 接口为实现观察者模式提供了一个内置平台。然而,它并没有被广泛使用,因为它的实现非常简单,而且大多数时候我们不想为了实现观察者模式而最终扩展一个类,因为 java 不提供类中的多重继承。

Java 消息服务 (JMS) 使用观察者模式和中介者模式来允许应用程序订阅和发布数据到其他应用程序。

策略模式也称为策略模式。我们定义了多个算法,并让客户端应用程序传递要用作参数的算法。这种模式的最佳示例之一是采用Comparator参数的 Collections.sort() 方法。基于 Comparator 接口的不同实现,对象以不同的方式进行排序。

要实现我们的文件系统实用程序,首先,我们需要创建将实际完成所有工作的接收器类。由于我们根据 Java 接口进行编码,因此我们可以拥有 FileSystemReceiver 接口及其针对不同操作系统风格(如 Windows、Unix、Solaris 等)的实现类。

5. 访客模式

当我们必须对一组相似类型的对象执行操作时,使用访问者模式。在访问者模式的帮助下,我们可以将操作逻辑从对象移动到另一个类。

例如,考虑一个购物车,我们可以在其中添加不同类型的商品(元素),当我们单击结帐按钮时,它会计算要支付的总金额。现在我们可以在项目类中拥有计算逻辑,或者我们可以使用访问者模式将此逻辑移到另一个类中。让我们在访问者模式的示例中实现这一点。

6. 解释器模式

用于定义语言的语法表示并提供解释器来处理该语法。

这种模式的最好例子是一个 java 编译器,它将 java 源代码解释为 JVM 可以理解的字节码。谷歌翻译也是解释器模式的一个例子,其中输入可以是任何语言,我们可以用另一种语言解释输出。

7. 迭代器模式

一种行为模式中的迭代器模式,它用于提供遍历一组对象的标准方法。迭代器模式广泛用于Java 集合框架,其中迭代器接口提供遍历集合的方法。

迭代器模式不仅仅是遍历一个集合,我们还可以根据我们的需求提供不同类型的迭代器。迭代器模式隐藏了遍历集合的实际实现,客户端程序只使用迭代器方法。

8. 纪念品模式

当我们想要保存对象的状态以便我们以后可以恢复时,可以使用备忘录设计模式。备忘录模式用于以这样的方式实现这一点,即对象的保存状态数据在对象外部不可访问,这保护了保存状态数据的完整性。

Memento 模式是用两个对象实现的——Originator 和 Caretaker。发起者是需要保存和恢复状态的对象,它使用内部类来保存对象的状态。内部类称为 Memento,它是私有的,因此不能从其他对象访问。

其他设计模式

有很多设计模式不属于 GoF 设计模式。让我们看看其中一些流行的设计模式

1. DAO 设计模式

DAO 设计模式用于将数据持久化逻辑解耦到一个单独的层。当我们设计系统以使用数据库时,DAO 是一种非常流行的模式。这个想法是将服务层与数据访问层分开。这样我们就在我们的应用程序中实现了逻辑的分离。

查看DAO 模式以获取完整的详细信息和示例程序。

2. 依赖注入模式

依赖注入允许我们移除硬编码的依赖,并使我们的应用程序松散耦合、可扩展和可维护。我们可以在 java 中实现依赖注入,将依赖解析从编译时转移到运行时。Spring 框架建立在依赖注入的原则之上。

阅读有关依赖注入模式的更多信息,以了解如何在我们的 Java 应用程序中实现它。

3.MVC 模式

MVC 模式是用于创建 Web 应用程序的最古老的架构模式之一。MVC 代表模型-视图-控制器。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>