第十二章 享元模式

news2025/2/22 18:33:03

文章目录

  • 前言
  • 一、享元模式基本介绍
  • 二、享元模式解决网站展现项目
    • 完整代码
    • WebSite 抽象网站类
    • User 外部状态用户
    • 内部状态网站 ConcreteWebSite
    • 网站工厂产生网站和负责共享(池) WebSiteFactory
    • Clint 测试
  • 三、享元模式在JDK-Interger的应用源码分析
  • 四、享元模式的注意事项和细节


前言

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


`

一、享元模式基本介绍

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

在这里插入图片描述

二、享元模式解决网站展现项目

在这里插入图片描述

完整代码

WebSite 抽象网站类

package tanchishell.SJMS.flyweight;

public abstract class WebSite {
    //User是外部状态,随着网站的类型不同,用户也就不同
    public abstract void use(User user);//抽象方法
}

User 外部状态用户

package tanchishell.SJMS.flyweight;

public class User {
    private String name;

    public User(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

内部状态网站 ConcreteWebSite

package tanchishell.SJMS.flyweight;

//具体网站
public class ConcreteWebSite extends WebSite {

    //共享的部分,内部状态
    private String type = ""; //网站发布的形式(类型)

    //构造器
    public ConcreteWebSite(String type) {
        this.type = type;
    }

    @Override
    public void use(User user) {

        System.out.println("网站的发布形式为:" + type + " 在使用中 .. 使用者是" + user.getName());
    }

}

网站工厂产生网站和负责共享(池) WebSiteFactory

package tanchishell.SJMS.flyweight;

import java.util.HashMap;
// 网站工厂类,根据需要返回一个网站(网站为内部状态)
public class WebSiteFactory {

    //集合, 充当池的作用
    private HashMap<String, ConcreteWebSite> pool = new HashMap<>();

    //根据网站的类型,返回一个网站, 如果没有就创建一个网站,并放入到池中,并返回
    public WebSite getWebSiteCategory(String type) {
        if (!pool.containsKey(type)) {
            //就创建一个网站,并放入到池中
            pool.put(type, new ConcreteWebSite(type));
        }
        return (WebSite) pool.get(type);
    }

    //获取网站分类的总数 (池中有多少个网站类型)
    public int getWebSiteCount() {
        return pool.size();
    }
}

Clint 测试

package tanchishell.SJMS.flyweight;

public class Client {
    public static void main(String[] args) {
        // 创建一个工厂类
        WebSiteFactory factory = new WebSiteFactory();
        // 客户要一个以新闻形式发布的网站
        WebSite webSite1 = factory.getWebSiteCategory("新闻");
        webSite1.use(new User("tom"));
        // 客户要一个以博客形式发布的网站
        WebSite webSite2 = factory.getWebSiteCategory("博客");
        webSite2.use(new User("jack"));
        // 客户要一个以博客形式发布的网站
        WebSite webSite3 = factory.getWebSiteCategory("博客");
        webSite3.use(new User("smith"));
        // 客户要一个以博客形式发布的网站
        WebSite webSite4 = factory.getWebSiteCategory("博客");
        webSite4.use(new User("king"));
        System.out.println("网站的分类共=" + factory.getWebSiteCount());

    }
}

输出

网站的发布形式为:新闻 在使用中 .. 使用者是tom
网站的发布形式为:博客 在使用中 .. 使用者是jack
网站的发布形式为:博客 在使用中 .. 使用者是smith
网站的发布形式为:博客 在使用中 .. 使用者是king
网站的分类共=2

三、享元模式在JDK-Interger的应用源码分析

会创建一个 (-128 ----- 127) 的Interger 数组,调用 valueOf 就先从数组中拿Interger 对象,没有再去 new Interger 对象

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

在这里插入图片描述

四、享元模式的注意事项和细节

在这里插入图片描述

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

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

相关文章

NFS部署

共享/webdata/目录&#xff1b; ~ 用于存储 AppSrv 主机的 WEB 数据&#xff1b; ~ 仅允许 AppSrv 主机访问该共享&#xff1b; ~ 考虑安全&#xff0c;不论登入 NFS 的使用者身份为何&#xff0c;都将其设置为匿名用 户访问 StorageSrv和AppSrv nfs共享 1.安装nfs(App…

pdf怎么删除其中一页?

pdf怎么删除其中一页&#xff1f;大家都应该知道&#xff0c;PDF是一种实用性非常强且非常便携文件格式&#xff0c;许多用户对其非常熟悉。不管是工作还是学习中&#xff0c;都会下载或者使用到pdf文件。pdf文件具有非常好的兼容性&#xff0c;F可以将各种图片、文字内容整合在…

根据cadence设计图学习硬件知识day05 了解一些芯片

1.NXS0102DC &#xff08;2位双电源转换收发器&#xff09; 1.NXS0102DC 介绍 NXS0102是一款2位双电源转换收发器&#xff0c;具有自动方向感测功能&#xff0c;可实现双向电压电平转换。它具有两个2位输入输出端口&#xff08;An和Bn&#xff09;、一个输出使能输入&#xf…

Transformer 原理及代码详细解析

Transformer 原理及代码详细解析 文章目录 Transformer 原理及代码详细解析一、Transformer 背景介绍1.1 Transformer 的诞生1.2 Transformer 的优势1.3 Transformer 的市场 二、Transformer架构解析2.1 认识 Transformer 架构2.1.1 Transformer模型的作用2.1.2 Transformer 总…

k8s优雅终止pod

k8s优雅终止pod 概述 Pod 销毁时&#xff0c;会停止容器内的进程&#xff0c;通常在停止的过程中我们需要执行一些善后逻辑&#xff0c;比如等待存量请求处理完以避免连接中断&#xff0c;或通知相关依赖进行清理等&#xff0c;从而实现优雅终止目的。本文介绍在 Kubernetes …

深度学习—入门

深度学习与机器学习的区别 深度学习由机器学习中的神经网络发展而来&#xff0c;机器学习多用于处理数值数据&#xff0c;而深度学习还可处理图片、音频等数据。 特征提取方面 机器学习的特征工程步骤需要靠手动完成&#xff0c;需要大量专业领域知识。深度学习通常由多个层组…

Mysql8.0 包学包会!一篇文章解决Mysql

基于尚硅谷的Mysql8.0视频&#xff0c;修修改改。提取了一些精炼的内容。 首先需要在数据库内引入一张表。链接地址如下。 链接&#xff1a;https://pan.baidu.com/s/1DD83on3J1a2INI7vrqPe4A 提取码&#xff1a;68jy 会进行持续更新。。 1. Mysql目录结构 Mysql的目录结构…

传感器-红外接收,NodeMCU,arduino实现红外接收,4.x版本的irRemote库的使用

一&#xff0c;常见视频和搜索到接收红外的代码 发送参考&#xff0c;接收参考 这里只是看arduino中的接收程序&#xff0c; #include <IRremote.h> int RECV_PIN 5; /红外接收模块的s引脚 IRrecv irrecv(RECV_PIN); decode_results results; void setup() {Serial.b…

复现Apache HTTPD 换行解析漏洞(CVE-2017-15715)

影响版本 2.4.0~2.4.29都有可能存在该漏洞 原理分析 进入容器 docker exec -it 容器ID /bin/bash 该程序是采用黑名单的形式&#xff0c;如果文件后缀名不在名单内即可上传&#xff0c;所以 a.php\x0A不在黑名单列表中&#xff0c;可以上传。但是x0A是换行符&#xff0c;所…

Cahpter 3 : Defining Clocks(ug903:Vivado using constraints

1、About Clocks 在数字设计中&#xff0c;时钟代表了从寄存器到寄存器可靠传输数据的时间基准。XilinxVivado集成设计环境&#xff08;IDE&#xff09;时序引擎使用时钟特性来计算时序路径要求&#xff0c;并通过松弛计算报告设计时序裕度。必须正确定义时钟&#xff…

本原数据:回归数据库技术本原,做难而正确的事

数据库技术是信息科技领域的最为重要的技术之一。随着科技的不断进步&#xff0c;数据库技术得到了迅速的发展&#xff0c;应用范围也越来越广泛。 与此同时&#xff0c;在数据量持续高速增长的情况下&#xff0c;企业对数据库也提出了更高的要求&#xff0c;例如数据存储越来…

海尔智家:智慧场景掌握「主动」权,用户体验才有话语权

2023年1月&#xff0c;《福布斯》AI专栏作家Rob Toews发布了年度AI发展预测&#xff0c;指出人工智能的发展将带来涉及各行业、跨学科领域的深远影响。变革将至&#xff0c;全球已掀起生成式AI热&#xff0c;以自然语言处理为代表的人工智能技术在快速进化&#xff0c;积极拥抱…

在maven工程下使用springmvc框架启动tomcat时报404 以及常见的错误和解决方式

以下的问题是我花了三天的时间解决的bug,网上找的各种资源都是一个样子&#xff0c;不能解决我的问题&#xff0c;非常的蛋疼。最后在咸鱼花了我15元找了个大神帮我调试的。 1.问题一 idea中通过maven已经导入了包&#xff0c;idea中也能定位到包的位置&#xff0c;本地maven仓…

用Python分析周杰伦歌曲并进行数据可视化

大家好&#xff0c;今天我们用python分析下周杰伦歌曲。为了尽量完整地呈现从原始数据到可视化的过程&#xff0c;接下来我们会先简单讲解数据的预处理过程&#xff0c;即如何将 JSON 数据转化为Excel 格式&#xff0c;以及如何对周杰伦的歌曲进行分词。 本案例中的歌词数据来…

RedHat Linux系统故障修复—— grub引导、MBR损坏修复过程

一、故障问题 MBR损坏是一种非常常见的错误&#xff0c;两种情况&#xff1a;1.MBR文件损坏 2.grub目录被误删除 1.首先&#xff0c;MBR是安装在硬盘的第一个扇区上占用了512个字节&#xff0c;其中前446字节是bootloader用于引导操作系统&#xff08;中间的64个自己用来指定…

KDJB-802C继电器成组保护校验仪

一、功能与用途 可对各种继电器&#xff08;如电流、电压、反时限、功率方向、阻抗、差动、低周、同期、频率、直流、中间、时间等&#xff09;及微机保护进行检定&#xff0c;并可模拟各种复杂的瞬时性、转换性故障进行整组试验。 二、主要技术参数 交流电流输出&#xff1a;…

多项目并行,如何用飞项快速获取关键信息与进展?

在企业中&#xff0c;多项目并行是常态。 项目经理身兼数职&#xff0c;既要掌握多个项目的关键信息&#xff0c;也要关注卡点与延期风险&#xff0c;跟踪关键任务进度。但常常存在与多个项目负责人对接信息延迟、环节卡点不清晰、文件繁多凌乱导致效率底下的问题。 今天就来…

这可能是你看过最详细的Java集合篇【一】—— ArrayList

文章目录 List集合的特点List集合常见实现类继承关系ArrayList继承关系数据结构和相关变量构造方法添加元素相关方法动态扩容机制 查找元素相关方法删除元素相关方法清空方法遍历方法其它方法常见面试题 List集合的特点 List集合的特点&#xff1a;存储元素有序、可重复、有索…

Shiro 实战教程(全)

目录 1.权限的管理 1.1 什么是权限管理 1.2 什么是身份认证 1.3 什么是授权 2.什么是shiro 3.shiro的核心架构 3.1 Subject 3.2 SecurityManager 3.3 Authenticator 3.4 Authorizer 3.5 Realm 3.6 SessionManager 3.7 SessionDAO 3.8 CacheManager 3.9 Cryptogr…

他们是怎么使用上gpt-4的-gpt-4在哪用

为什么有人在使用GPT4 openAI尚未正式发布GPT-4模型&#xff0c;也没有公布任何与GPT-4相关的信息。因此&#xff0c;没有人可以在使用GPT-4模型。 值得注意的是&#xff0c;虽然OpenAI尚未正式发布GPT-4&#xff0c;但由于其之前发布的GPT-3具有出色的性能和功能&#xff0c…