【设计模式】UML和设计原则

一、分类

1、创建型模式

用于描述"怎样创建对象" 它的主要特点是"将对象的创建与使用分离"。GoE(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者 等 5 种创建型模式。

2、结构型模式

用于描述如何将类或对象按某种布局组成更大的结构,GoE(四人组)书中提供了代理、适配器、桥接、装饰、外观、享元、组合 等7 种结构型模式。

3、行为型模式

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GoE(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。

二、UML图

统一建模语言(UML)是用来设计软件的可视化建模语言。特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。

UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9种图。

(一)类图

  类图 (Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。

  在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解。

  类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型。

在UML类图中,类使用包含类名、属性(field)和方法(method)且带有分割线的矩形来表示:

属性/方法名称前加的加号和减号表示了这个属性/方法的可见性,UL类图中表示可见性的符号有三种

  • +表示public
  • -表示private
  • #表示protected

属性的完整表示方式是:可见性名称 :类型 = 缺省值

方法的完整表示方式是:可见性名称(参数列表): 返回类型

注意:

1、中括号中的内容表示可选

2、也有将类型放到变量名前面,返回值放到方法名前面

(二)类之间关系

关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系 ,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。

关联又可以分为单向关联 ,双向关联 ,自关联。

1、关联关系

(1)单向关联
(2)双向关联
(3)自关联

2、聚合关系

3、组合关系

4、依赖关系

5、继承关系

6、实现关系

三、软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

(一)开闭原则

  对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

  想要达到这样的效果,我们需要使用接口和抽象类:

  因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。

(二)里氏代换原则



(三)依赖倒转原则

(四)接口隔离原则

(五)迪米特法则


(六)合成复用原则


视频参考:黑马程序员Java设计模式详解, 23种Java设计模式(图解+框架源码分析+实战)

相关推荐
海宇AI1 分钟前
Java数据工程:利用海宇婚恋风险报告优化高端婚恋实名与涉诉核验合规体验
java·人工智能
CEZ6 分钟前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·开源
Wang's Blog16 分钟前
Java框架 SpringCloud 快速入门: Gateway 路由的过滤器配置
java·spring cloud·gateway
迅猛龙办公室39 分钟前
python实现简单进度条
java·前端·python
斯内普吖44 分钟前
(开源)宠物饲养系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源·宠物
知守观1 小时前
Spring Boot 2.1 → 3.5 迁移推演:这个 2018 年的项目会炸在哪
java·spring boot
Flynt1 小时前
800KB 的 JSON 吃掉 8.5 秒 CPU:jackson 这波修复里,最容易被漏掉的洞藏在字符串里
java·安全
后端LV1 小时前
Caffeine 快到 1450 万 ops/s,为什么我还是不敢说数据一致
java·后端
蜗牛互联网1 小时前
Java 17调用Embeddings API:余弦相似度与FAQ拒答阈值
java·开发语言·人工智能
Q26433650232 小时前
【有源码】基于SpringBoot+Vue的博物馆展览与服务一体化平台-java博物馆数字化展品展示与交互平台设计
java·vue.js·spring boot·spring·毕业设计·javaweb·课程设计