设计模式入门

0. 类图

在这里插入图片描述
在这里插入图片描述

1. 设计原则

1.单一职责原则:每个类只有一个功能
2.开放封闭原则:模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)
3.里氏代换原则:子类拥有父类的所有方法和属性,从而可以减少创建类的工作量
4.依赖倒转原则
5.合成/聚合复用原则
6.接口隔离原则
7.迪米特法则

2. 创建者模式

2.1 单例模式

其核心思想是确保一个类只有一个实例,并提供一个全局访问点

2.1.1 懒汉式
2.1.2 饿汉式
2.1.3 应用场景
  1. 数据库连接池:在数据库软件系统中,使用数据库连接池可以节省打开或关闭数据库连接所引起的效率损耗。通过单例模式,可以确保整个应用中只有一个数据库连接池实例,避免重复创建和销毁连接,从而提高性能。
  2. 日志记录:当应用程序需要记录日志时,使用单例模式可以确保只有一个日志记录器实例。这样,所有的日志信息都将被记录到同一个实例中,便于集中管理和分析。
  3. 线程池:在多线程编程中,线程池可以使用单例模式来确保整个应用只有一个线程池实例。这样可以避免线程数量过多或过少带来的问题,提高程序的性能和稳定性。

工厂模式

原型模式

建造者模式

3. 结构型模式

4. 行为型模式

用到的方法

synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。
synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。

synchronized的3种使用方式:
修饰实例方法:作用于当前实例加锁
修饰静态方法:作用于当前类对象加锁
修饰代码块:指定加锁对象,对给定对象加锁
在这里插入图片描述
每次执行方法前先获取锁。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马程序员 Java设计模式学习笔记(一)

目录 一、设计模式概述 1.1、23种设计模式有哪些? 1.2、软件设计模式的概念 1.3、学习设计模式的必要性 1.4、设计模式分类 二、UML图 2.1、类图概述 2.2、类图的作用 2.3、类图表示法 类的表示方式 类与类之间关系的表示方式 关联关系 聚合关系 组合…

GLM-4 能力接近ChatGPT4和Claude 2.1

本文以GLM-4 发布功能作为基准对比ChatGPT4,Claude-2测试。 帮关注下 输入测试用例是GLM-4提供,用专业性打败专业性才有趣! 以多模态理解,代码解释器,工具调用,逻辑推理方向测试。 1月16日,…

提纲框架写作方法

论文提纲 论文提纲的意义 有利于检查构思有利于调整修改和写作 拟定提纲的目的 拟标题写总论点做总安排:几个方面,什么顺序做下位论点:每个项目的下位论点,直到段一级,写段的论点句考虑各段安排,把材料…

新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?

作者:小岩 编辑:彩云 Sam Altman在整个AI领域,乃至整个科技领域都被看作是极具影响力的存在,而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感,他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…

01 SpringMVC的快速理解

1.1 如图所示,SpringMVC负责表述层(控制层Controller)实现简化! SpringMVC的作用主要覆盖的是表述层,例如: 请求映射、数据输入、视图界面、请求分发、表单回显、会话控制、过滤拦截、异步交互、文件上传…

CSS 网页布局

文章目录 布局元素页眉标签导航栏侧边栏网页主体文章页脚测试网页布局元素 布局元素 在html4.01等之前的版本中html并没有专用的布局元素,而是统统使用div进行布局 页眉标签 header标签一般用来嵌套网页的标题,搜索栏,导航栏等 导航栏 n…

redis原理(四)redis命令

目录 一、字符串命令: 二、列表命令: 三、集合命令: 四、散列命令: 五、有序集合命令: 六、redis发布与订阅命令: 七、事务命令 八、其他命令 1、排序:SORT 2、键的过期时间&#xff…

使用muduo库编写网络server端

muduo库源码编译安装和环境搭建 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 #include<iostream> #include<muduo/net/TcpServer.h> #include<muduo/net/EventLoop.h> using namespace std; using namespace muduo; using name…

STC8H8K蓝牙智能巡线小车——1. 环境搭建(基于RTX51操作系统)

1. 基本介绍 开发环境准备&#xff1a;Keil uVision5 烧录软件&#xff1a;STC-ISP&#xff08;V6.92A&#xff09; 芯片&#xff1a; STC8H8K64U-45I-LQFP64 芯片引脚&#xff1a; 2.创建项目 打开Keil&#xff0c;点击【Project】&#xff0c;选择【new uVersion proje…

中北数据结构2023真题

雪雾: 设计一个算法&#xff0c;将一个节点值为自然数的单列表拆分成两个单列表&#xff0c;原表中值为偶数的节点保留&#xff0c;而值为奇数的节点&#xff0c;按他们在原表的相对次序组成一个新的单列表 #include <stdio.h> #include <stdlib.h>typedef struct…

【计算机图形学】习题课:Viewing

【计算机图形学】Viewing 部分问题与解答 CS100433 Computer Graphics Assignment 21 Proof the composed transformations defined in global coordinate frame is equivalent to the composed transformations defined in local coordinate frame but in different composing…

Python+Selenium+Unittest 之selenium13--WebDriver操作方法3-鼠标操作2

这篇说下ActionChains里常用的几种鼠标操作的方法。 ActionChains常用的鼠标操作方法 click()鼠标左键单击double_click()鼠标左键双击context_click()鼠标右键单击move_to_element()鼠标移动到某个元素上&#xff08;鼠标悬浮操作&#xff09;click_and_hold()点击鼠标左键&am…