热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入理解设计模式与七大原则

本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。
Java中的24种设计模式及其应用:

一、创建型模式

1、抽象工厂模式(Abstract Factory Pattern): 提供一个接口,用于创建一系列相关或依赖的对象,而无需指定具体类。

2、生成器模式(Builder Pattern): 封装复杂对象的构建过程,允许逐步构建对象,将构建逻辑与表示分离,从而支持多种表示形式。

3、工厂方法模式(Factory Method Pattern): 定义一个创建对象的接口,但具体的实例化由子类决定,使类的实例化延迟到子类中。

4、原型模式(Prototype Pattern): 当创建对象的成本较高或过程复杂时,使用原型模式通过复制现有对象来创建新对象。

5、单例模式(Singleton Pattern): 确保一个类只有一个实例,并提供全局访问点,常用于需要全局控制资源的场景。

6、多例模式(Multiton Pattern): 允许创建多个实例,每个实例在特定条件下唯一,适用于需要多个不同状态的全局对象。

二、结构型模式

1、适配器模式(Adapter Pattern): 通过适配器将一个类的接口转换为客户期望的另一个接口,使得原本不兼容的类可以协同工作。适配器模式分为对象适配器和类适配器。

2、桥接模式(Bridge Pattern): 将抽象部分与实现部分分离,使它们可以独立变化,提高系统的灵活性和扩展性。

3、组合模式(Composite Pattern): 使用树形结构将对象组合成整体,使客户可以一致地处理单个对象和对象组合,简化客户端代码。

4、装饰者模式(Decorator Pattern): 动态地为对象添加职责,提供比继承更灵活的扩展方式,增强对象的功能而不改变其接口。

5、外观模式(Facade Pattern): 提供一个简化的高层接口,隐藏子系统复杂性,使子系统更容易使用。

6、享元模式(Flyweight Pattern): 通过共享对象来减少内存占用,适用于大量细粒度对象的场景,提高性能。

7、代理模式(Proxy Pattern): 为其他对象提供代理以控制对它的访问,适用于远程调用、延迟加载等场景。

三、行为型模式

1、责任链模式(Chain of Responsibility Pattern): 创建一个对象链来处理请求,每个对象负责检查并处理请求或传递给下一个对象。

2、命令模式(Command Pattern): 将请求封装成对象,便于参数化其他对象,支持队列、日志记录和撤销操作。

3、解释器模式(Interpreter Pattern): 为语言创建解释器,解析表达式并执行相应操作。

4、迭代器模式(Iterator Pattern): 提供一种顺序访问聚合对象元素的方法,而不暴露内部结构。

5、中介者模式(Mediator Pattern): 中心化对象间的通信,简化对象之间的交互,降低耦合度。

6、备忘录模式(Memento Pattern): 在不破坏封装的前提下,保存对象的内部状态,以便后续恢复。

7、观察者模式(Observer Pattern): 定义一对多的依赖关系,当一个对象状态改变时,所有依赖对象都会自动更新。

8、状态模式(State Pattern): 允许对象根据内部状态改变其行为,仿佛改变了类的行为。

9、策略模式(Strategy Pattern): 定义一组算法,封装每个算法,并使它们可以互换,使算法的变化独立于使用算法的客户。

10、模板方法模式(Template Method Pattern): 定义一个算法的框架,允许子类重定义某些步骤而不改变算法的整体结构。

11、访问者模式(Visitor Pattern): 在对象结构上增加新的操作,而不需要修改这些对象的类。

七大设计原则:

1、单一职责原则(Single Responsibility Principle): 每个类应只承担一项职责,确保类的内聚性和可维护性。

2、里氏替换原则(Liskov Substitution Principle): 子类应当能够替换父类出现在程序中的任何地方,保持功能一致性。

3、依赖倒置原则(Dependency Inversion Principle): 高层模块不应依赖低层模块,二者都应依赖抽象;抽象不应依赖细节,细节应依赖抽象。

4、接口隔离原则(Interface Segregation Principle): 接口应尽量细化,避免臃肿的接口,确保每个接口只包含必要的方法。

5、迪米特法则(Law of Demeter): 减少对象之间的直接交互,降低耦合度,提高模块的独立性。

6、开闭原则(Open-Closed Principle): 软件实体应对扩展开放,对修改关闭,确保系统易于扩展且稳定。

7、组合/聚合复用原则(Composition/Aggregation Reuse Principle): 优先使用组合和聚合而非继承来实现代码复用,提高代码的灵活性和可维护性。
推荐阅读
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文介绍了如何通过配置 Android Studio 和 Gradle 来显著提高构建性能,涵盖内存分配优化、并行构建和性能分析等实用技巧。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
author-avatar
观海望天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有