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

设计模式——创建型

1.单例模式

单例模式主要用于某个类有且只能用一个对象的场景,单例模式下不能外部实例化对象,由类内部自行私有化实例对象并提供一个可以获得该对象的方法。单例模式主要有饿汉模式(安全,但在编译时就会自动创建对象,即使不使用对象也会存在,会造成一定资源的浪费)、懒汉模式(安全,通过synchroized锁实现,每次获取对象时都会加锁,会对性能有一定影响)、DCL模式(基本安全,通过synchroized锁实现,在获取对象的方法内部加锁,当已经实例化对象时不会加锁直接返回对象,但在极少数情况下会出现线程不安全的情况)、静态内部类模式(安全,在类内定义一个静态的私有化的类来实例化对象)。

饿汉模式:
public class CEO {private static final mCEO = new CEO();//私有化实例化对象private CEO() { }//私有化构造方法public static CEO getCEO() {return mCEO;}//提供获取对象的接口
}
懒汉模式:
public class CEO {private static CEO mCEO;private CEO() { }public static synchroized CEO getCEO() {if(mCEO == null) {mCEO = new CEO(); }return mCEO;}//synchroized,加同步锁,保证唯一;
}DCL模式:
public class CEO {private static CEO mCEO = null;private CEO() { }public static CEO getCEO() {if(mCEO == null) {synchroized(CEO.class) {if(mCEO == null) {mCEO = new CEO();}}}return mCEO;}
}静态内部类模式:当外部类被加载时,静态内部类不会立即加载,只有在第一次调用内部类的静态成员或方法时才会加载,这样实现了懒加载的效果。同时,类加载过程是线程安全的,因此静态内部类单例模式也是线程安全的
public class CEO {private CEO() { }public static CEO getCEO() {return CEOInstance.mCEO;}//静态内部类private static class CEOInstance {private static final CEOInstance mCEO = new CEO();}
}

2.构建者模式

用于创建复杂对象,将对象的创建与表示分离、按步奏创建对象,通常包含以下角色。
产品(Product)——要创建的复杂对象,一般包含多种属性;
抽象构建者(Abstract Builder)——创建产品的各个抽象方法,以及返回最终产品的方法;
具体构建者(Concrete Builder)——负责产品的具体创建,以及最终产品的返回;
指导者(Director)——使用构建者构建产品;

public class Product {private String partA;private Int partB;private Double partC;public get();//相应参数的get方法public set();//相应参数的set方法
}
public interface Builder {void buildPartA(String part);void buildPartA(Int part);void buildPartA(Double part);Product getProduct();
}
public ConcreteBuilder implements Builder {private Product product;public ConcreteBuilder() {product = new Product();}@Overridepublic  void buildPartA(String part) {product.setPartA(part);}@Overridepublic  void buildPartA(Int part) {product.setPartB(part);}@Overridepublic  void buildPartA(Double part) {product.setPartC(part);}@Overridepublic  Product getProduct() {return product;}
}
public class Director {private Builder builder;public void setBuilder(Builder builder) {this.builder = builder;}public Product concreteProduct() {builder.builderPartA("partA");builder.builderPartB(45);builder.builderPartC(1.44);return builder.getProduct();}
}
//实际使用
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director();
director.setBuilder(builder);
Product product = director.concreteProduct();

3.工厂模式

特点:向上转换思想;不直接new对象,子类具体决定实例化什么对象;
应用:需要生成复杂对象的地方;
角色:抽象工厂、具体工厂、抽象产品、具体产品;
通用模式写法:
抽象工厂——定义一个返回抽象产品的抽象方法,该方法负责构造产品;
具体工厂——重写构造产品的方法,返回对象为具体产品;
抽象产品——定义一个抽象方法,该方法与产品关联;
具体产品——根据具体产品重写父类中与产品关联的抽象方法;

//抽象产品
public abstract class Product{public abstract void fuction();
}
//具体产品A
public class ProductA extends Product{@Override public void function() {system.out.println("产品A的功能是...")}
}
//具体产品B
public class ProductB extends Product{@Override public void function() {system.out.println("产品B的功能是...")}
}//抽象工厂写法
public abstract class Factory{public abstract  Product  createProduct();
}
//具体工厂写法
public ConcreteFactoryA extends Factory {@Overridepublic ProductA createProduct() {return new ProductA();}
}
public ConcreteFactoryB extends Factory {@Overridepublic ProductB createProduct() {return new ProductB();}
}
//客户or测试
public class Client{public static void main(String[] args) {Factory factory = new ConcerateFactoryA();   Product product = factory.createProduct();product.fuction();}
}

相关文章:

设计模式——创建型

1.单例模式 单例模式主要用于某个类有且只能用一个对象的场景,单例模式下不能外部实例化对象,由类内部自行私有化实例对象并提供一个可以获得该对象的方法。单例模式主要有饿汉模式(安全,但在编译时就会自动创建对象,…...

iTOP-i.MX8M开发板添加USB网络设备驱动

选中支持 USB 网络设备驱动,如下图所示: [*] Device Drivers→ *- Network device support → USB Network Adapters→ {*} Multi-purpose USB Networking Framework 将光标移动到 save 保存,如下图所示: 保存到 arch/arm64/c…...

分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测

分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测 目录 分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测 2.代码说明:要求于Matlab 2021版及以上版本。 程序…...

JMeter 的并发设置教程

JMeter 是一个功能强大的性能测试工具,可以模拟许多用户同时访问应用程序的情况。在使用 JMeter 进行性能测试时,设置并发是非常重要的。本文将介绍如何在 JMeter 中设置并发和查看报告。 设置并发 并发是在线程组下的线程属性中设置的。 线程数&#…...

数据治理有哪些产品

数据治理是现代企业管理中至关重要的一个环节。随着企业的数据量不断增长,如何有效地管理和利用数据成为了一个亟待解决的问题。幸运的是,市场上已经涌现出了许多优秀的数据治理产品,下面就来介绍一些常见的数据治理产品。 首先,我…...

windows安装go,以及配置工作区,配置vscode开发环境

下载安装go 我安装在D:\go路径下配置环境变量 添加GOROOT value为D:\go修改path 添加%GOROOT%\bin添加GOPATH value为%USERPROFILE%\go 其中GOPATH 是我们自己开发的工作区,其中包含三个folder bin,pkg,以及src,其中src为我们编写代码的位置 配置vscod…...

第五章nginx负载均衡

负载均衡:反向代理来实现 nginx的七层代理: 七层是最常用的反向代理方式,只能配置在nginx配置文件的hppt模块中。而且配置方法名称:upstream模块,不能写在server中,也不能在location中,在http…...

MATLAB计算一组坐标点的相互距离(pdist、squareform、pdist2函数)

如果有一组坐标P(X,Y),包含多个点的X和Y坐标,计算其坐标点之间的相互距离 一、坐标点 P[1 1;5 2;3 6;8 8;4 5;5 1; 6 9];二、pdist函数 输出的结果是一维数组,获得任意两个坐标之间的距离,但没有对应关系 Dpdist(P)三、square…...

我国农机自动驾驶系统需求日益增长,北斗系统赋能精准农业

中国现代农业的发展,离不开智能化、自动化设备,迫切需要自动驾驶系统与农用机械的密切结合。自动驾驶农机不仅能够缓解劳动力短缺问题,提升劳作生产效率,同时还能对农业进行智慧化升级,成为解决当下农业痛点的有效手段…...

防雷检测行业应用完整解决方案

防雷检测是指对雷电防护装置的性能、质量和安全进行检测的活动,是保障人民生命财产和公共安全的重要措施。防雷检测的作用和意义主要有以下几点: 防止或减少雷电灾害事故的发生。雷电是一种自然现象,具有不可预测、不可控制和高能量等特点&a…...

16.4 【Linux】特殊文件与程序

16.4.1 具有 SUID/SGID 权限的指令执行状态 SUID 的权限其实与程序的相关性非常的大!为什么呢?先来看看 SUID 的程序是如何被一般使用者执行,且具有什么特色呢? SUID 权限仅对二进制程序(binary program)…...

qrcode.react生成二维码

qrcode.react 是一个**用于生成二维码(QR 码)的 React 组件库。**它提供了一个 React 组件,可以轻松地在 React 应用程序中生成和显示 QR 码。 使用 qrcode.react,可以以声明式的方式在 React 组件中定义 QR 码的内容、尺寸、颜色…...

ETF套利及交易者如何进行套利的

ETF套利 什么是ETF套利为什么同一ETF在不同交易所上的价格会出现差异?如何操作ETF套利交易所如何解决ETF套利问题的? 什么是ETF套利 ETF(Exchange-Traded Fund)套利是一种通过利用市场中不同交易所交易价格之间的差异来获得利润的…...

了解异或的好处和用途

1.什么是异或? 异或:对于二进制,相同为0 不同为11 ⊕ 1 00 ⊕ 0 01 ⊕ 0 10 ⊕ 1 1 2.异或的好处? 异或的好处?1.快速比较两个值 2.xor a a例如 a 3 011xor 0110003.可以使用 异或 来使某些特定的位翻转【原因…...

vue函数式组件

<template>改为<template functional> 即可然后模板里使用到父组件参数的话&#xff0c;需在变量前面加上 props&#xff0c;如 <div>{{count}}</div> 改为 <div>{{props.count}}</div>如果组件比较简单&#xff0c;只是展示数据的话&…...

Idea Live Template 功能总结

文章目录 Java自带的template属性模板psf——public static finalpsfi——public static final intpsfi——public static final StringSt——String 方法模板psvm——main方法sout——打印语句iter——for迭代循环fori——for循环 代码块模板if-e —— if elseelse-if 自定义自…...

场景入门12----构造脚本搭建栅栏和石头墙

打开任意一个蓝图都有构造脚本&#xff0c;就是当这个蓝图在诞生时就会运行的东西 新建一个蓝图&#xff0c;在构造函数里添加静态网格体&#xff0c;把蓝图拖出来就能显示 多个栅栏 创建多个栅栏。新建一个变量为栅栏数量&#xff0c;数组从0开始&#xff0c;所以countt要减一…...

零基础看懂免费开源的Stable Diffusion

文章目录 前言Diffusion模型推理过程训练过程 Stable Diffusion模型参考 前言 前面一篇文章主要讲了扩散模型的理论基础&#xff0c;还没看过上篇的小伙伴可以点击查看&#xff1a;DDPM理论基础。这篇我们主要讲一下一经推出&#xff0c;就火爆全网的Stable Diffusion模型。St…...

Zmq适配Win7 SP0 / Win XP/ Win 2k

1.目的 由于发布版本的libzmq使用了较多新的系统特性&#xff0c;导致在低版本windows平台上无法使用。 因此&#xff0c;需要对zmq源码进行修改以适配低版本的系统&#xff0c;如Win7 SP0&#xff0c;Win XP&#xff0c;Win2003等等。 2.Win7 SP0 #if defined ZMQ_HAVE_WIN…...

掌握Python的X篇_30_使用python解析网页HTML

本篇将会介绍beutifulsoup4模块&#xff0c;可以用于网络爬虫、解析HTML和XML&#xff0c;对于没有接触过前端&#xff0c;不了解HTML是如何工作的&#xff0c;需要先解释一下什么事HTML。 1. HTML 网页中的各种布局等的背后都是非常简单的纯文本格式&#xff0c;那种格式称为…...

记录算法笔记(2025.5.28)只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; 输入&#xff1…...

设计模式——适配器设计模式(结构型)

摘要 本文详细介绍了适配器设计模式&#xff0c;包括其定义、核心思想、角色、结构、实现方式、适用场景及实战示例。适配器模式是一种结构型设计模式&#xff0c;通过将一个类的接口转换成客户端期望的另一个接口&#xff0c;解决接口不兼容问题&#xff0c;提高系统灵活性和…...

智慧体育馆数字孪生,场馆管理智能化

图扑数字孪生智慧体育馆可视化管理平台。通过高精度三维建模&#xff0c;对体育馆建筑结构、设施设备等进行 1:1 虚拟映射&#xff0c;全方位还原场馆物理实体。系统集成多维度传感器数据&#xff0c;实现对人流量、客流密度、区域拥堵指数等信息的实时采集与分析&#xff0c;动…...

Rust并发编程实践指南

Rust并发编程实践指南 一、Rust并发编程哲学 mindmaproot((Rust并发))Ownership System▶ 移动语义▶ 借用规则Type Safety▶ Send Trait▶ Sync TraitZero-Cost Abstraction▶ 无运行时开销▶ 编译期检查Fearless Concurrency▶ 数据竞争预防▶ 死锁检测工具二、核心并发模型…...

建立连接后 TCP 请求卡住

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 这篇文章描述了一个内核和BPF网络问题 以及故障排除步骤&#xff0c;这是一个值得深入研究的有趣案例 Linux 内核网络复杂性。 目录 1 故障报告 1.1 现象&#xff1a;概率健康检查失败 1.2 范围&am…...

pytest中的元类思想与实战应用

在Python编程世界里&#xff0c;元类是一种强大而高级的特性&#xff0c;它能在类定义阶段深度定制类的创建与行为。而pytest作为热门的测试框架&#xff0c;虽然没有直接使用元类&#xff0c;但在设计机制上&#xff0c;却暗含了许多与元类思想相通的地方。接下来&#xff0c;…...

mongodb集群之副本集

目录 1. 适用场景备份高可用性 2. 集群搭建如何搭建资源规划根据资源完成各节点conf文件的配置启动各个mongodb节点初始化集群信息 搭建实例Linux搭建实例&#xff08;待定&#xff09;Windows搭建实例 3. 副本集基础操作4.集群平滑升级 1. 适用场景 备份 1&#xff09;服务器…...

互联网大厂Java求职面试:Spring Boot 3.2+自动配置原理、AOT编译及原生镜像

标题&#xff1a;互联网大厂Java求职面试&#xff1a;Spring Boot 3.2自动配置原理、AOT编译及原生镜像 简述 本文详细探讨了在互联网大厂Java求职面试中&#xff0c;技术总监级别面试官与求职者郑薪苦之间的精彩对话&#xff0c;主题聚焦于Spring Boot 3.2自动配置原理、AOT…...

TypeScript 中高级类型 keyof 与 typeof的场景剖析。

文章目录 前言一、typeof&#xff1a;从值到类型的映射1. 核心概念2. 类型推导示例3. 常见用途 二、keyof&#xff1a;从类型到键的映射1. 核心概念2. 常见用途 三、typeof keyof&#xff1a;强强联合的实战场景1. 场景一&#xff1a;对象属性的安全访问2. 场景二&#xff1a;…...

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天&#xff0c;EasyRTC作为一款全平台互通的实时视频通话方案&#xff0c;实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同&#xff0c;开发者通过该方案可快速搭建1v1实时音视频通信系统&#xff0c;适…...