### Java设计模式整理笔记 #### 一、UML结构图 **1. 类图** - **定义**: 显示出类、接口以及它们之间的静态结构和关系的图。 - **分类**: - **描述类**: 包含五个部分:类名、属性清单、方法清单、性质清单、内部成员类。 - **描述接口**: 和类图类似,唯一不同之处在于接口名称前加上了`interface`关键字。 **2. 对象图** - 描述系统中一组对象及其相互关系的静态快照。 **3. 构件图** - 描述组成基于系统的物理代码的单元以及它们之间的依赖关系。 **4. 部署图** - 描述系统中运行时的硬件节点、通信连接以及在其上执行的软件构件的部署情况。 **5. 行为型图** - **案例图**: 描述系统的功能需求。 - **活动图**: 描述业务流程或工作流。 - **状态图**: 描述一个实体在不同事件的影响下状态的变化过程。 - **时序图**: 按时间顺序展示对象间交互的过程。 - **合作图**: 强调参与交互的对象的组织结构。 #### 二、开闭原则 (OCP) - **定义**: 一个软件实体应当对扩展开放,对修改关闭。 - **含义**: - 软件模块应该能够被扩展,以便在不修改现有代码的基础上增加新功能。 - 已有的重要抽象层不应被修改,以保持软件的稳定性和延续性。 #### 三、与其他设计原则的关系 - **里氏代换原则**: 任何基类可以出现的地方,子类一定可以出现。 - **依赖倒转原则**: 依赖于抽象,而非具体实现。 - **合成/聚合复用原则**: 使用合成或聚合的方式复用代码,而不是继承。 - **迪米特法则**: 减少类之间的耦合度,即一个类应该只和最少数量的其他类进行交互。 - **接口隔离原则**: 提供小而专的接口,而不是大而全的接口。 #### 四、重构做法的讨论 - **条件转移语句改写成多态性条件转移语句**: 将多个条件分支逻辑封装进不同的子类中,利用多态性替代传统的条件判断,提高代码的可维护性和扩展性。 #### 五、Java语言的接口 - **定义**: 接口是实现构件可插拔性的关键,是一组方法特征的集合。 - **特点**: - 接口中方法特征包括名称、参数列表和返回类型。 - 一个类可以实现多个接口。 - 接口不能包含实例变量或构造函数,但可以有公共、静态和最终字段。 #### 六、接口的常见用法 - **单方法接口**: 只包含一个方法的接口。 - **标识接口**: 不对实现类提出任何具体要求,只表示实现该接口的类属于某特定类型。 - **常量接口**: 声明新的类型的同时可以包含一些常量。 #### 七、抽象类 - **定义**: 用于定义部分实现,可以包含实例变量、构造函数以及抽象方法和具体方法。 - **继承原则**: - 子类应是超类的一种特殊类型。 - 子类不应该取代或取消超类的功能。 - 继承应在分类学意义上合理使用,避免从工具类继承。 #### 八、里氏代换原则 - **定义**: 如果类型T1的对象o1可以用类型T2的对象o2替换,并且不会改变程序的行为,则称T2是T1的子类型。 - **应用场景**: 确保子类可以替换其父类,确保程序的健壮性和兼容性。 #### 九、依赖倒转原则 - **定义**: 依赖于抽象而不是具体实现。 - **实现方式**: - 针对接口编程。 - 引用对象的抽象类型。 - **Java支持**: - 抽象类可以提供方法的部分实现。 - 接口定义的方法无实现。 - 实现接口或继承抽象类的选择取决于具体情况。 #### 十、接口隔离原则 - **定义**: 使用多个专用接口优于单一的通用接口。 - **目标**: 提高接口的针对性和适用性。 #### 十一、合成/聚合复用原则 - **定义**: 在新对象中使用已有对象作为其一部分,而非通过继承的方式。 - **分类**: - **合成**: 部分对象与整体对象的生命周期一致。 - **聚合**: 表示整体与部分的关系,但部分可以独立存在。 #### 十二、迪米特法则 - **定义**: 一个对象应当对其他对象有尽可能少的了解。 - **目的**: 降低系统的复杂性,减少类间的耦合度。 - **应用场景**: - 通过减少类间的交互来降低系统的耦合度。 - 提高系统的灵活性和可维护性。 ### 结论 Java设计模式是解决软件设计中常见问题的有效手段。通过理解并运用这些模式,开发人员可以编写出更加灵活、可扩展和易于维护的代码。本文档概述了设计模式的基本概念,包括UML图、基本原则(如开闭原则、依赖倒置原则等)、接口和抽象类的使用,以及各种设计模式的应用场景。通过深入学习这些内容,开发者可以更好地理解和应用设计模式,提高软件开发的质量和效率。
剩余9页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java和Vue的kopsoftKANBAN车间电子看板设计源码
- 影驰战将PS3111 东芝芯片TT18G23AIN开卡成功分享,图片里面画线的选项很重要
- 【C++初级程序设计·配套源码】第1期-语法基础
- 基于JavaScript、CSS、HTML的简易DOM版飞机游戏设计源码
- 基于Java开发的日程管理FlexTime应用设计源码
- SM2258XT-BGA144-4BGA180-6L-R1019 三星KLUCG4J1CB B0B1颗粒开盘工具 , EC, 3A, 94, 43, A4, CA 七彩虹SL300这个固件有用
- GJB 5236-2004 军用软件质量度量
- 30天开发操作系统 第 8 天 - 鼠标控制与切换32模式
- spice vd interface接口
- 安装Git时遇到找不到`/dev/null`的问题