当前位置: 首页 > news >正文

常见的设计模式-简述

一、什么是设计模式?

设计模式:

  • 经过前人无数次的实践总结出来的,设计过程中可以反复使用的,可以解决特定问题的设计方法。

二、常用的设计模式

单例模式(饱汉 / 饥汉)

  • 饱汉模式:一出来就创建单实例;
  • 饥汉模式:需要的时候才创建单实例;

单例模式

    1. 构造方法私有化,除了自己的类中能创建外其他地方都不能创建(饱汉 / 饥汉);
    1. 在自己的类中创建一个单实例(创建时需要方法同步);
    1. 提供一个方法获取该实例对象;
/*** @Author TeaBowl* @Date 2023/12/12 10:04* @Version 1.0* 单例模式:饱汉模式*/
public class PersonFactory {/*** 1. 构造方法私有化*/private PersonFactory() {}/*** 2. 创建单实例(饱汉模式):开始就创建单实例*/private static PersonFactory instance = new PersonFactory();/*** 3.提供方法获取* synchronized 同步方法* @return*/public synchronized static PersonFactory getInstance() {return instance;}public static void main(String[] args) {PersonFactory.getInstance().toString();}
}
/*** @Author TeaBowl* @Date 2023/12/12 10:04* @Version 1.0* 单例模式:饥汉模式*/
public class PersonFactory {/*** 1. 构造方法私有化*/private PersonFactory() {}/*** 2. 创建单实例(饥汉模式):开始没有创建实例,实例为空*/private static PersonFactory instance = null;/*** 3.提供方法获取* synchronized 同步方法* @return*/public synchronized static PersonFactory getInstance() {// 如果实例为空,创建实例if (instance == null) {instance = new PersonFactory();}return instance;}public static void main(String[] args) {// 饥汉模式:需要创建实例的时候,调用getInstance()方法创建实例;PersonFactory.getInstance().toString();}

工厂模式

对象的创建交给一个工厂去创建;

  • Spring IOC就是使用了工厂模式;

代理模式

Spring AOP就是使用了动态代理模式;

相关文章:

  • Mars3d的gltf零部件控制(运载火箭)示例关于gltf内部的animations说明
  • 零元购:一种新型的消费模式?
  • 如何写出高质量博客的思考
  • 数据库产品层出不穷,金融行业应该怎么选?|飞轮科技联合创始人连林江
  • Gitlab+GitlabRunner搭建CICD自动化流水线将应用部署上Kubernetes
  • 数字化转型对企业有什么好处?
  • Java UDP 多人聊天室简易版
  • MySQL注入入门简述
  • 安防视频监控系统EasyNVR平台集成后无法播放的原因与解决步骤
  • 如何将CAD图纸导入Revit软件?
  • 五、HotSpot细节实现
  • Python数值类型(整形、浮点型和复数)及其用法
  • 【鸿蒙开发】第五章 ArkTS基础知识 - 声明变量、常量、类型和函数
  • 软件工程之需求分析
  • 利用R语言heatmap.2函数进行聚类并画热图
  • 2017 前端面试准备 - 收藏集 - 掘金
  • gitlab-ci配置详解(一)
  • HashMap ConcurrentHashMap
  • Java精华积累:初学者都应该搞懂的问题
  • js递归,无限分级树形折叠菜单
  • PAT A1017 优先队列
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Ruby 2.x 源代码分析:扩展 概述
  • vue学习系列(二)vue-cli
  • webpack项目中使用grunt监听文件变动自动打包编译
  • yii2中session跨域名的问题
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 计算机常识 - 收藏集 - 掘金
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 软件开发学习的5大技巧,你知道吗?
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 一个项目push到多个远程Git仓库
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • NLPIR智能语义技术让大数据挖掘更简单
  • 湖北分布式智能数据采集方法有哪些?
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (4)Elastix图像配准:3D图像
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • .net core使用ef 6
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net访问oracle数据库性能问题
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net下简单快捷的数值高低位切换
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Bean注解详解
  • @EnableAsync和@Async开始异步任务支持