设计模式

正如其名,设计模式是设计软件时最常见(和频繁)问题的解决方案。 这些模式大多是“演化”出来的,而不是“发现”出来的。许多专业人士的学习总结成这些设计模式。这些模式都不会强制您在实现上做任何事情;它们只是解决特定问题——以特定方式——在特定环境中的指南。代码实现是您的责任。

在软件工程中,软件设计模式是解决软件设计中给定环境中常见问题的通用可重用解决方案。它不是可以直接转换成源代码或机器代码的完成设计。它是一种描述或模板,用于解决可以在许多不同情况下使用的解决方案。[维基百科]

鉴于它们的重要性,让我们更详细地学习这些设计模式(在Java的上下文中)。

创建型设计模式结构型设计模式行为型设计模式
简单工厂适配器责任链
工厂方法桥接命令
抽象工厂组合迭代器
建造者装饰器中介者
原型外观备忘录
单例享元观察者
代理访问者
策略
状态
模板方法

1. 创建型设计模式

创建型模式通常用于代替使用构造函数的直接实例化。它们使创建过程更具适应性和动态性。特别是,它们可以提供关于创建哪些对象、如何创建这些对象以及如何初始化它们的极大的灵活性。

创建型模式侧重于如何实例化一个对象或一组相关的对象。

设计模式名称目的
建造者建造者模式是构造复杂对象的一种替代方法。只有当我们想使用相同的对象构建过程来构建不同类型的不可变对象时,才应使用它。
原型原型模式用于应用程序需要创建大量具有几乎相同状态或差异很小的类实例的场景。
工厂工厂模式最适合于涉及复杂对象创建步骤的情况。它确保这些步骤集中化,并且不暴露给组合类。
抽象工厂当我们需要在工厂模式创建的工厂组之上提供另一个抽象级别时,使用抽象工厂模式。
单例单例模式使应用程序在每个JVM中只有一个类的实例。

2. 结构型设计模式

结构型设计模式向我们展示了如何以灵活和可扩展的方式将系统的不同部分粘合在一起。这些模式有助于确保整个应用程序结构无需更改即可响应其中一个部分的更改。

在软件工程中,结构型设计模式是帮助通过识别实体之间简单实现关系来简化设计的模式。

结构型模式主要关注对象组合,或者换句话说,实体如何相互使用。

设计模式名称目的
适配器适配器将类的接口转换为客户端期望的另一个接口。它让具有不兼容接口的类协同工作。
桥接桥接模式用于将类解耦为两个部分——抽象和实现——以便它们都在未来独立演化,而不会相互影响。它增加了类抽象和实现之间的松耦合。
组合组合模式帮助将对象组合成树状结构以表示整体-部分层次结构。组合允许客户端以相同的方式处理单个对象和对象组合。
装饰器装饰器模式用于在不修改同一类的其他实例的情况下,向特定类的实例添加额外的功能或行为。
外观外观模式为子系统的一组接口提供统一的接口。它定义了一个更高级别的接口,使子系统更易于使用。
享元享元模式能够有效地使用共享对象来支持大量细粒度对象。享元是可以在多个上下文中同时使用的共享对象。它在每个上下文中充当独立对象。
代理在代理模式中,代理对象为另一个对象提供替代或占位符,以控制对其的访问。代理广泛用于实现延迟加载用例,在这种用例中,我们不希望在需要之前创建完整的对象。

3. 行为型设计模式

行为模式抽象了我们想要对对象或执行操作的类采取的操作。通过更改对象或类,我们可以更改所使用的算法、受影响的对象或行为,同时仍然保留客户端类的相同基本接口。

在软件工程中,行为设计模式是识别对象之间的常见通信模式并实现这些模式的模式。

这些模式不仅指定了结构,还概述了它们之间的消息传递/通信模式。

设计模式名称目的
责任链责任链设计模式通过将接收对象链接在一起构成链,使多个对象有机会处理请求。
命令命令模式有助于将业务逻辑抽象为离散的操作,我们称之为命令。这些命令对象有助于在两个类之间实现松耦合,其中一个类(调用者)调用另一个类(接收者)上的方法来执行业务操作。
解释器解释器模式指定了如何以编程方式评估语言中的句子。它有助于为简单语言构建语法,以便可以解释句子。
迭代器迭代器模式提供了一种按顺序访问聚合对象的元素而不暴露其底层表示形式的方法。
中介者中介者模式定义了一个对象,该对象封装了一组对象如何交互。它通过使对象不相互显式引用来促进松耦合,并使我们能够独立地改变它们的交互。
备忘录备忘录模式,也称为快照模式,用于将对象的状态恢复到以前的状态。
观察者观察者模式定义了对象之间的一对多依赖关系,以便当一个对象的状态更改时,其所有依赖项都会自动收到通知和更新。它也被称为发布-订阅模式。
状态状态模式允许对象在其内部状态更改时更改其行为。该对象将出现类更改。对象可能的每个状态应有一个单独的具体类。
策略策略模式用于在运行时从多种其他相同任务的实现中选择特定的算法或任务实现。
模板方法模板方法模式定义了执行多步骤算法的顺序步骤,并可以根据要求提供默认实现(基于需求)。
访问者访问者模式用于在不修改对象层次结构源代码的情况下修改对象层次结构的的行为。

祝您学习愉快!!

发表评论

  1. 很棒的博客,Lokesh。谢谢!简单而最好。非常有帮助。请尽快更新剩余的TODO。

  2. 你好,

    信息非常清晰。确实有助于理解带有实际示例的设计模式。
    请更新剩余的TODO

评论已关闭。

关于我们

HowToDoInJava 提供 Java 和相关技术的教程和操作指南。

它还分享最佳实践、算法和解决方案以及经常被问到的面试题。

我们的博客

REST API 教程

关注我们