2023年java面试之设计模式

news2024/9/21 20:46:03

1.什么是设计模式

设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

2.为什么要学习设计模式

看懂源代码:如果你不懂设计模式去看Jdk、Spring、SpringMVC、IO等等等等的源码,你会很迷茫,你会寸步难行。

看看前辈的代码:你去个公司难道都是新项目让你接手?很有可能是接盘的,前辈的开发难道不用设计模式?编写自己的理想中的好代码:我个人反正是这样的,对于我自己开发的项目我会很认真,我对他比对我女朋友还好,把项目当成自己的儿子一样。

3.设计模式分类

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

4.设计模式的六大原

开放封闭原则(Open Close Principle)

原则思想:尽量通过扩展软件实体来解决需求变化,而不是通过修改已有的代码来完成变化描述:一个软件产品在生命周期内,都会发生变化,既然变化是一个既定的事实,我们就应该在设计的时候尽量适应这些变化,以提高项目的稳定性和灵活性。

优点:单一原则告诉我们,每个类都有自己负责的职责,里氏替换原则不能破坏继承关系的体系。

里氏代换原则(Liskov Substitution Principle)

原则思想:使用的基类可以在任何地方使用继承的子类,完美的替换基类。

大概意思是:子类可以扩展父类的功能,但不能改变父类原有的功能。子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,子类中可以增加自己特有的方法。

优点:增加程序的健壮性,即使增加了子类,原有的子类还可以继续运行,互不影响。

依赖倒转原则(Dependence Inversion Principle)

依赖倒置原则的核心思想是面向接口编程.

依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,这个是开放封闭原则的基础,具体内容是:对接口编程,依赖于抽象而不依赖于具体。

接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

例如:支付类的接口和订单类的接口,需要把这俩个类别的接口变成俩个隔离的接口

迪米特法则(最少知道原则)(Demeter Principle)

原则思想:一个对象应当对其他对象有尽可能少地了解,简称类间解耦

大概意思就是一个类尽量减少自己对其他对象的依赖,原则是低耦合,高内聚,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。

优点:低耦合,高内聚。

单一职责原则(Principle of single responsibility)

原则思想:一个方法只负责一件事情。

描述:单一职责原则很简单,一个方法 一个类只负责一个职责,各个职责的程序改动,不影响其它程序。 这是常识,几乎所有程序员都会遵循这个原则。

优点:降低类和类的耦合,提高可读性,增加可维护性和可拓展性,降低可变性的风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生周刊 | 使用 K8s 可视化工具集来调试业务 | 2023-1-30

开源项目推荐 k8z k8z 意在 K8s 业务层面,提供一个方便好用的 K8s 集群可视化工具集。目前包含以下功能: 终端:连接到集群任意 Pod 容器上,方便调试Tcpdump:对集群内容器进行 tcpdump 抓包,可直接展示抓…

七天实现一个go web框架

目录引流为什么要用web框架复习下net/http库以及http.Handler接口代码结构General.go启动!上下文必要性封装前context.go拆分router封装后启动!前缀树路由Trie 树目标实现前缀树修改router改变ServeHTTP实现分组控制Group对象的属性其余实现中间件实现其…

云计算|OpenStack|社区版OpenStack安装部署文档(三 --- 身份认证服务keystone安装部署---Rocky版)

一, 什么是keystone keystone是openstack的关键必选组件之一,其作用是提供身份认证服务,所有的身份认证信息都是存储在controller节点的数据库内。 具体的关于keystone的介绍可以参见官方文档:OpenStack Docs: Identity servic…

设备树中的pin 信息,是在什么时候被初始化的?

一、开发环境 SOC : IMX6ULL系统内核:4.1.15 二、问题描述 Linux 内核提供了pinctrl 和gpio 子系统用于GPIO 驱动。pinctrl_ctrl 子系统从设备树中获取pin 信息,然后配置pin复用 和pin电气特征(上/下拉,速度,驱动能…

python小游戏——像素鸟代码开源

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好&#…

特斯拉Q4财报:底部反弹70%,为信仰打call

北京时间2023年1月26日美股盘后,探案君的信仰之股——特斯拉公布了2022年第四季度财报,无论营收还是利润依然吊打华尔街预期,这就是特斯拉,当然这也很特斯拉! 一、整体业绩,很特斯拉 营收方面&#xff1a…

JavaScript基础复盘4

JavaScript作用域 JavaScript作用域就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性,减少命名冲突。 JS没有块级作用域,{}内写的变量外部也可以使用。 作用域链 作用域链:内部函数访问外部函数…

拯救OOM~ 字节自研 Android 虚拟机内存管理优化黑科技 mSponge

本文描述的虚拟机内存管理优化方案,是从应用侧视角对 Android 虚拟机内存管理进行改造,优化了虚拟机对 LargeObjectSpace 的内存管理策略,间接增加其它内存空间使用上限。改造后的方案,32 位运行环境 LargeObjectSpace 的内存使用…

Aspose.CAD for .NET 23.1.0 Crack

Aspose.CAD for .NET 是一个独立的类库,它增强了 Windows 和 ASP.NET 的应用程序,以便在不需要 AutoCAD 甚至任何其他工作流渲染过程的情况下处理和渲染 CAD 绘图。CAD 类库允许将 DWG、DWT、DWXF、IFC、PLT、DGN、OBJ、STL、IGES、CFF2 文件以及图层和布…

封装一个顺序栈,并封装其相应的操作:判空、入栈、出栈、遍历栈、销毁

main.cpp#include <iostream> #include<fei1.h>using namespace std;int main() {der L;//创建L.date(215);//入栈L.ent(45);L.ent(23);L.ent(98);L.ent(12);//遍历L.trav();// 出栈L.come();L.come();//遍历L.trav();//销毁L.dest();return 0; }fei.cpp#include&l…

docker学习(三):docker的常用命令问问

文章目录前言docker镜像分层加载原理docker镜像commit操作产生新镜像本地镜像发布到阿里云将本地镜像推送到私有库前言 大家好&#xff0c;这是我学习docker系列的笔记文章&#xff0c;目标是掌握docker,为后续学习K8s做准备。本文记录了docker镜像分层加载的原理&#xff0c;…

IDEA SpringBoot热部署

IDEA SpringBoot热部署【自动帮开发者重启 SpringBoot项目&#xff0c;以达到】 1.添加SpringBoot热部署框架支持 在pom.xml中添加如下框架引用&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devt…

Smart HTML Elements R1 2023

Smart HTML Elements R1 2023 增加了Angular 15支持。 添加了对Blazor的Microsoft.NET 7支持。 添加了三维图表组件。 添加了对网格保存/加载状态&#xff08;持久状态&#xff09;的支持。 调度程序 定义特定时段的可用性。 现在可以限制用户输入。 当有多个图例时&a…

长沙23岁应届生做软件测试1年,月入10k!室友悔不当初!

先简单的介绍一下自己&#xff0c;大家好&#xff01;我叫做程双喜&#xff0c;今天23&#xff0c;2021年大学毕业于长沙的一所大专学校&#xff0c;专业是软件测试java专业&#xff0c;三年时间过得很快&#xff0c;转眼间来到了毕业季&#xff0c;自己还是一无所成&#xff0…

Hadoop

1 Hadoop常用端口号 hadoop2.xHadoop3.x访问HDFS端口500709870访问MR执行情况端口80888088历史服务器1988819888客户端访问集群端口90008020 2 Hadoop配置文件 hadoop2.x core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml slaves hadoop3.x core-site.xml、hdfs…

ESP-IDF在VSCode中创建工程文件

1.新建工程项目&#xff0c;打开VSCode&#xff0c;打开命令面板&#xff0c;并输入esp-idf new&#xff0c;执行新建esp-idf项目命令&#xff1a; 2.设置项目名&#xff0c;项目工程目录位置&#xff0c;芯片类型&#xff0c;端口号 3.点击choose Template&#xff0c;从一个…

第八届蓝桥杯省赛 C++ A/B组 - 分巧克力

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;后缀表达式 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥杯的小伙伴整理常考算法题解&#xff0c;祝大…

全志A40i+Logos FPGA开发板(4核ARM Cortex-A7)硬件说明书(下)

前 言 本文档主要介绍板卡硬件接口资源以及设计注意事项等内容,测试板卡为创龙科技旗下的全志A40i+Logos FPGA开发板。 核心板的ARM端和FPGA端的IO电平标准一般为3.3V,上拉电源一般不超过3.3V,当外接信号电平与IO电平不匹配时,中间需增加电平转换芯片或信号隔离芯片。按键…

1、语义软分割算法(Semantatic Human Matting)原理及pytorcch代码详述

一、Semantatic Human Matting原理 Semantatic Human Matting 文章链接请点击这里 第一步:将输入图像送入到T-Net中进行计算,得到三张图:Bs、Fs和Us. T-Net:就是一个编码和解码的过程,和常见的语义分割网络类似 Bs:确定的背景区 Fs:确定的前景区 Us: 不确定的区域 第二…

计算机网络详解--套接字编程

目录 1.什么是网络编程 2.TCP/IP协议 3.Socket套接字 流套接字:使用传输层TCP&#xff08;传输控制协议&#xff09; 数据报套接字:使用传输层UDP&#xff08;用户数据报协议&#xff09; 原始套接字 4.Java数据报套接字通信模型 UDP数据报套接字编程 DatagramSocket A…