Java学习——设计模式——介绍

文章目录

设计模式介绍

设计模式design patterns,指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可用性。

1995年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》一书,在此书中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的"四人组" (Gang of Four,GoF) 著称。

设计模式主要是基于OOP编程提炼的,基于几个原则:

  • 开闭原则。软件应该对扩展开放,而对修改关闭。这里的意思是在增加新功能的时候,能不改代码就尽量不要改,如果只增加代码就完成了新功能,那是最好的。
  • 里氏替换原则。是一种面向对象的设计原则,如果调用一个父类的方法可以成功,那么替换成子类调用也应该完全可以运行。

23个常用模式分类:

1、创建型模型

用于描述"怎样创建对象",它的主要特点是"将对象的创建与使用分离"。GoF(四人组)书中提

供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。

2、结构型模型

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

3、行为型模式

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。

GoF(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访
问者、备忘录、解释器
等 11 种行为型模式

UML的类图

类图Class diagram是显示了模型的静态结构,特别是模型中存在的类、类内部结构以及它们与其他类的关系等。

类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化人们对系统的理解;是系统分析和设计阶段的产物,是系统编码和测试的重要模型。

表示

类图使用包含类名、属性field、方法method和带有分割线的矩形来表示。

属性/方法名称前加的加号、减号表示了这个属性/方法的可见性,UML类图中表示可见性的符号:

1、+ :表示public;

2、- :表示private;

3、#:表示protected

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

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

类与类之间关系的表示

关联关系

关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系。

1、单向关联

带箭头的实线

2、双向关联

不带箭头的直线

3、自关联

带箭头且指向自身的线

聚合关系

聚合关系是强关联关系,是整体和部分之间的关系。

通过成员对象实现,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。

聚合关系用带空心的菱形的实线表示,菱形指向整体

组合关系

组合表示类之间的整体与部分的关系,它是一种更强烈的聚合关系。

组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。

组合关系用带实心菱形的实线来表示,菱形指向整体

依赖关系

依赖关系是一种使用关系,是对象之间耦合度最弱的一种关联方式,是临时性的关联。

在代码的某一个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。

依赖关系用带箭头的虚线来表示,箭头从使用类指向被依赖的类

继承关系

继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系

继承关系用带空心三角箭头的实现来表示,箭头从子类指向父类

实现关系

实现关系是接口与实现类之间的关系。类实现了接口,类中的操作实现类接口中所声明的所有的抽象操作

实现关系用带空心三角箭头的虚线表示,箭头从实现类指向接口

相关推荐
我不是程序猿儿4 分钟前
【C#】 lock 关键字
java·开发语言·c#
tmacfrank1 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
weixin_472339462 小时前
Maven 下载安装与配置教程
java·maven
向上的车轮3 小时前
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
笔记·学习·matlab
Magnum Lehar3 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
就叫飞六吧3 小时前
Spring Security 集成指南:避免 CORS 跨域问题
java·后端·spring
Mcworld8573 小时前
java集合
java·开发语言·windows
天黑请闭眼3 小时前
IDEA:程序编译报错:java: Compilation failed: internal java compiler error
java·intellij-idea
前端小崔3 小时前
从零开始学习three.js(18):一文详解three.js中的着色器Shader
前端·javascript·学习·3d·webgl·数据可视化·着色器
龙湾开发4 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图
c++·笔记·学习·图形渲染·贴图