软件设计模式

2023-09-18 13:56:50

1.UML

1.1类图表示法

uml类图中,类使用包含类名、属性、方法

属性或方法前的加好和减号表示了这个方法的可见性,可见性的符号有三种:

+表示public

-表示private

#表示protected

1.2 类与类之间关系

关联关系

 单向关联

双向关系

自关联

聚合关系

聚合关系是关联关系的一种,是强关联关系,是整体和部分的关系

聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,成员对象可以脱离整体对象独立存在。带空心菱形的实线来表示

组合关系

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

组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在了,部分对象也将不存在,部分对象不能脱离整体对象存在,用带实心菱形的实线来实现

依赖关系

依赖关系是一种使用关系,是对象之间耦合度最弱的一种关联关系,是临时性的关联,在代码中,某个类的方法,通过局部变量、方法的参数或静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责;依赖关系用带箭头的虚线表示,箭头指向被依赖的类

继承关系

是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系;使用空心三角箭头实线表示,箭头从子类指向父类

实现关系

是接口与实现类之间的关系,类中的操作实线了接口中所声明的所有的抽象操作;实现关系用带空心三角箭头虚线来表示,箭头从实现类指向接口

2.软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性

开闭原则

对扩展开发,对修改关闭

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

里式代换原则

里式代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解为:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法

依赖倒转原则

高层模块不应该依赖底层模块,两者都应该依赖其抽象

抽象不应该依赖细节,细节应该依赖抽象

简单的说就是要求对抽象进行编程,不要对实现进行编程,这样降低了客户与实现模块间的耦合

3.创建型模式

用于描述"怎样创建对象",主要特点“将对象的创建与使用分离”

提供了单例、原型、工厂方法、抽象工厂、建造者

4.结构型模式

结构型模式描述如何将类或对象按某种布局组成更大的结构,分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足"合成复用原则",所以对象结构模式比类结构模式具有更大的灵活性。

结构型模式7种:代理模式、适配器模式、装饰着模式、桥接模式、外观模式、组合模式、享元模式

4.1 代理模式

由于某些原因需要给某对象提供一个代理以控制对该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。java中的代理按照代理了生成时机不同分为静态代理和动态代理。静态代理在编译器就生成,动态代理在java运行时动态生成。动态代理又有jdk代理和cglib代理。

5.行为模式

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务

行为型模式

更多推荐

Java面向对象(四)

提示:以下是本篇文章正文内容,下面案例可供参考一、JavaBean是什么?1.概念JavaBean是一种Java语言写成的可重用组件。所谓javaBean,是指符合如下标准的Java类:类是公共的有一个无参的公共的构造器有属性,且有对应的get、set方法2.代码:publicclassCustomer{private

Vue3 基础 – 快速上手 & 常用指令

1.在HTML网页中使用vue3的3个基本步骤a.通过script标签的src属性,在当前网页中全局引入vue3的脚本文件:<scriptsrc="https://unpkg.com/vue@3/dist/vue.global.js"></script>b.创建vue3的单页面应用程序实例://2.1从Vue对象中解构

【数据可视化】动态条形图Python代码实现

使用Python中的bar_chart_race_cn库创建动态条形图前言数据可视化在今天的数据分析和传达信息中起着至关重要的作用。动态条形图是一种强大的数据可视化工具,可以帮助我们展示随时间变化的数据趋势。本文将介绍如何使用Python编程语言中的bar_chart_race_cn库创建动态条形图。动态条形图可以用于

JDBC实现数据库批量插入

目录一、JDBC实现批量插入几种方式二、PreparedStatementaddBatch方法使用三、Statement和PreparedStatement区别使用Java数据库连接(JDBC)实现批量插入可以提高数据库操作的效率,特别是在需要一次性插入多条数据时。一、JDBC实现批量插入几种方式使用PreparedS

Redis中是如何实现分布式锁的?

分布式锁常见的三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。本次面试考点是,你对Redis使用熟悉吗?Redis中是如何实现分布式锁的。要点Redis要实现分布式锁,以下条件应该得到满足互斥性在任意时刻,只有一个客户端能持有锁。不能死锁客户端在持有锁的期间崩溃而没有主动解锁,也

实战 | 服务端开发与计算机网络结合的完美案例

前言大家好,我是Martin后端,可以说是仅次于算法岗之外竞争最为激烈的岗位,而其中的服务端开发也是很多人会选择在秋招中投递的一个岗位,我想对于很多人来说,走上服务端开发之路的起点就是一个回声服务器了。今天带大家实战一把,真实体验服务端底层数据交换的点点滴滴,在这过程中可以让你看见TCP三次握手四次挥手的具体过程,全程

kafka 消费者的消费策略以及再平衡1

一kafka再平衡1.1kafka的再平衡Kafka的再平衡是consumer所消费的topic发生变化时,topic上的分区再次分配的情况。默认策略是Range+CooperativeSticky。Kafka可以同时使用多个分区分配策略。1.2kafka触发再平衡的情况1.consumergroup中的新增或删除某个

Microsoft 365跨平台协同办公功能,实现Mac、iOS、Windows用户的实时无缝协作

Microsoft365forMac(Office365)现已更新,最新版本的Microsoft365现已支持跨平台协同办公,接下来为你介绍一些使用office365Mac版进行创作及写作的好方法。Microsoft365在全平台共用相同的代码库,这意味着使用Mac、ios和Windows的365用户可以实现实时无缝协

在线记录学习笔记用哪一款工具?

及时将学习过程中的所感所想以笔记的形式记录下来是非常有必要的,不管是学生还是专业人士,都需要及时将学习笔记记录下来,支持在线记录学习笔记的工具用哪一款呢?很多人会直接使用大家所熟知的word或者txt文档来记事,传统的这种记笔记的方式虽然操作简单,且可以大窗口打开快捷记录,但是记录的笔记只能在一个设备上查看,要想实现在

实现表格表头自定义编辑、一键导入、增加列

1.前言本文基于vue2及elementUI的表格组件2.效果及功能展示3.需求背景有时候客户急需看到需求实现的页面,而此时后端接口没有,产品原型没有,只能前端出马,画一个静态页面,来展示客户想要的东西,如果是通过F12来改很慢,于是就有了这篇文章,使用它可以轻松的对表格的任何地方进行修改,且可以增加减少行或者列,它完

路由器ip地址设置

当你使用路由器时,你可以按照以下步骤设置路由器的IP地址。这样可以确保你的网络连接正常并允许其他设备连接到你的路由器。**步骤一:登录路由器管理界面**首先,你需要登录到路由器的管理界面。打开你的浏览器,并输入路由器的默认IP地址。常见的路由器默认IP地址包括192.168.0.1、192.168.1.1或192.16

热文推荐