享元模式

 通过共享的方式高效的支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

using System;
using System.Collections.Generic;namespace ConsoleApp1
{public abstract class BikeFlyWeight{// 内部状态protected bool state = false; //false,未借;true:已借protected string bikeId;// 外部状态public abstract void ride(string name);public abstract void back();public bool getState() {return state;}}public class MoBikeFlyWeight : BikeFlyWeight{public MoBikeFlyWeight(string bikeId) {this.bikeId = bikeId;}public override void ride(string name){this.state = true;Console.WriteLine(name + ":借了单车(" + bikeId + ")");}public override void back(){state = false;Console.WriteLine("单车(" + bikeId + "):已还回");}}public class BikeFlyWeightFactory {private static BikeFlyWeightFactory instance = new BikeFlyWeightFactory();private List<BikeFlyWeight> pool = new List<BikeFlyWeight>();public static BikeFlyWeightFactory getInstance(){return instance;}private BikeFlyWeightFactory() {for (int i = 0; i < 2; i++) {pool.Add(new MoBikeFlyWeight(i + "号"));}}public BikeFlyWeight getBike(){foreach (BikeFlyWeight bike in pool){if (!bike.getState()){return bike;}}return null;}}class Program{static void Main(string[] args){BikeFlyWeightFactory factory = BikeFlyWeightFactory.getInstance();BikeFlyWeight bike1 = factory.getBike();bike1.ride("张珊");BikeFlyWeight bike2 = factory.getBike();bike2.ride("李思");bike1.back();BikeFlyWeight bike3 = factory.getBike();bike3.ride("王武");BikeFlyWeight bike4 = factory.getBike();if (bike4 != null){bike4.ride("周柳");}else{Console.WriteLine("无单车可借");}}}
}

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

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

相关文章

Linux - 第五节

sudo用不了 - 新建的普通用户 以管理员的身份&#xff0c;去修改etc/sudoers配置下的文件&#xff0c;添加白名单 代码的编译 gcc - 只能用于编译C语言 g - 既能用来编译C语言&#xff0c;也能用来编译C ggc的简易用法 预处理 预处理功能主要包括宏定义,文件包含,条件编…

突破编程_C++_C++14新特性(变量模板)

1 变量模板在 C14 中的引入与扩展 在 C14 中&#xff0c;变量模板的引入与扩展为编程带来了许多便利&#xff0c;特别是在泛型编程方面。这一特性允许我们直接定义模板变量&#xff0c;而不需要将其包装在模板类或模板函数中&#xff0c;从而使得代码更加直观和简洁。 首先&a…

vue nextTick的简化版

以下内容来源于通义千问 的回答 在 Vue.js 中&#xff0c;$nextTick 的核心功能是在下次 DOM 更新循环结束之后执行延迟回调。这是因为 Vue 使用异步更新队列来优化渲染性能&#xff0c;当数据发生变化时&#xff0c;并不会立即更新 DOM&#xff0c;而是在同一事件循环结束时批…

2024年 前端JavaScript 进阶 第2天 笔记

2.1-内容和创建对象方式 2.2-164-构造函数 2.3-new实例化执行过程 2.4-实例成员和静态成员 2.5-基本包装类型 2.6-0bject静态方法 2.7-数组reduce累计方法 对象数组 加0 2.7-数组find、every和转换为真 --说明手册文档 MDN Web Docs 2.8-字符串常见方法 2.3 String 1.常见实例…

【微服务框架】微服务简介

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

论文复现2: YOLOv5 DeepSORT视频追踪

YOLOv5 DeepSORT是视频检测跟踪算法,结合了YOLOv5的目标检测和DeepSORT的目标跟踪能力。它具备实时性能、高准确性以及稳定的目标跟踪能力,为行人和车辆等实时监测和分析提供了有效的解决方案。 直接在github找的综合代码,没有做分别训练,因为我要实现的就一个类,所以直接…

2010-2021年各省碳排放测算数据(含原始数据+计算过程+结果)

2010-2021年各省碳排放测算数据&#xff08;含原始数据计算过程结果&#xff09; 1、时间&#xff1a;2010-2021年 2、指标&#xff1a;原煤(万吨)、原煤(万吨CO2)、焦炭(万吨)、焦炭(万吨CO2)、汽油(万吨)、汽油(万吨CO2)、煤油(万吨)、煤油(万吨CO2)、柴油(万吨)、柴油(万吨…

比较转录组分析揭示了116种山茶属(Camellia)植物的深层系统发育和次生代谢物演化-文献精读分享1

Comparative transcriptomic analysis unveils the deep phylogeny and secondary metabolite evolution of 116 Camellia plants &#xff0c;比较转录组分析的一篇文献。 SUMMARY 茶花植物包括200多个种类&#xff0c;具有极大的多样性和巨大的经济、观赏和文化价值。我们对…

Git版本管理使用手册--目录

理解几个重要的概念 1安装Git、TortoiseGit 2为群组成员分配角色 3创建项目仓库 3Git与其他产品继承 4克隆仓库到本地 5使用.ignore文件 8将本地项目提交到空白仓库 9管理者创建开发分支 10开发者从仓库获取开分支&#xff08;检出分支以及分支切换&#xff09; 11开发者提交代…

微信小程序 - 用promise封装wx.request

简介 Promise 对象表示异步操作最终的完成&#xff08;或失败&#xff09;以及其结果值。在javascript中&#xff0c;当发起异步方法调用时候&#xff0c;要想在调用方线程获取异步结果&#xff0c;可以借助promise对象实现。 promise同时支持all,any等api。本文将会对wx.req…

[机器学习]练习切比雪夫距离

切比雪夫距离(Chebyshev distance) 切比雪夫距离是指在几何空间中两点之间的最大差值&#xff0c;或者说是两点在各个坐标轴上差值的最大绝对值。它以数学家彼得切比雪夫&#xff08;Peter Chebyshev&#xff09;的名字命名。 在二维空间中&#xff0c;切比雪夫距离可以表示为…

黄金涨是商品牛市的领先信号

自2022年11月以来&#xff0c;黄金价格持续上涨&#xff0c;目前已经突破历史新高&#xff0c;历史上黄金上涨&#xff0c;大多是商品全面牛市的领先信号。在2008年Q4、2019年也出现过&#xff0c;黄金比其他商品更强&#xff0c;但随后的2009年和2020年均是商品的全面牛市。同…

spring注解@EventListener实现监听原理

文章目录 EventListener使用方式EventListener实现原理1.引入时机2 初始化时机3 作用时机->将加了EventListener注解的方法识别出来&#xff0c;并封装为监听器&#xff0c;加载spring容器中 总结 EventListener使用方式 package com.cyl.listener;import org.springframew…

【EasyExcel】多sheet、追加列

业务-EasyExcel多sheet、追加列 背景 最近接到一个导出Excel的业务&#xff0c;需求就是多sheet&#xff0c;每个sheet导出不同结构&#xff0c;第一个sheet里面能够根据最后一列动态的追加列。原本使用的 pig4cloud 架子&#xff0c;使用 ResponseExcel注解方式组装返回数据…

设计模式深度解析:AI如何影响装饰器模式与组合模式的选择与应用

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 AI如何影响装饰器模式与组合模式的选择与应用 在今天这个快速发展的技术时代&#…

Segger Embedded Studio IDE使用体验——默认的Section和Linker的设置

Segger Embedded Studio IDE使用体验之一——默认的Section和Linker的设置 一、简介二、操作2.1 编译后代码分析2.1.1 符号浏览器2.1.2 读取elf文件和map文件 2.2 调试2.2.1 查看变量2.2.2 设置供电 2.3 运行环境设置2.3.1 编译器2.3.2 汇编器2.3.3 包含其他文件2.3.4 .bss和.d…

Java SE入门及基础(45)

目录 嵌套类&#xff08;上&#xff09; 4. 内部类 内部类对象创建语法 示例 5. 局部内部类 示例 6. 匿名内部类 示例 Java SE文章参考:Java SE入门及基础知识合集-CSDN博客 嵌套类&#xff08;上&#xff09; 4. 内部类 As with instance methods and variables, an…

【Java】【设计模式】动态代理

因为需要看spring源代码&#xff0c;看到代理这个词看不懂&#xff0c;后面顺着线索发现需要学习一下设计模式的动态代理&#xff0c;然后疯狂补课&#xff0c;结果发现&#xff0c;都不知道在说什么例子给的也比较抽象&#xff0c;好在自己付出快4小时还是有一些微弱的感悟的。…

Spring Cloud: openFegin使用

文章目录 一、OpenFeign简介二、Springboot集成OpenFeign1、引入依赖2、EnableFeignClients注解&#xff08;1&#xff09;应用&#xff08;2&#xff09;属性解析 3、 FeignClient&#xff08;1&#xff09;应用&#xff08;2&#xff09;属性解析&#xff08;3&#xff09;向…

基于百度地图实现Android定位功能实现(一)

Android集成百度地图 文章目录 Android集成百度地图前言准备工作创建工程申请密钥 在项目中集成BaiduMap SDK创建地图 前言 本案例使用百度地图实现在Android中集成地图&#xff0c;并且实现了普通地图/卫星地图&#xff0c;以及路况图和热状图功能&#xff1b; 参考技术文档&…