【设计模式】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设计模式(图解+框架源码分析+实战)

相关推荐
做个文艺程序员2 小时前
第04篇:K8s 弹性伸缩实战:HPA、VPA、KEDA——Java SaaS 应对流量洪峰的秘密武器
java·容器·kubernetes·弹性伸缩·自动扩容·ai 推理伸缩
石山代码5 小时前
ArrayList / HashMap / ConcurrentHashMap
java·开发语言
HEADKON6 小时前
尼洛替尼300mg每日两次空腹服用治慢粒,QT延长风险高,低钾低镁需纠正后用药
uml
AskHarries7 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
daidaidaiyu7 小时前
ThingsBoard 规则链系统源码分析和自定义定时器
java
小毛驴8508 小时前
spring-boot-maven-plugin,maven-compiler-plugin 功能对比
java·python·maven
csdn_aspnet8 小时前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法
霸道流氓气质8 小时前
通义灵码 IDEA 插件完全使用指南
java·ide·intellij-idea
诸葛务农8 小时前
道路行驶条件下电动汽车永磁电机的有效使用寿命及永磁体的失效和回收再利用(下)
java·开发语言·算法
Percep_gan8 小时前
Java8中的stream的测试使用
java