网站常规seo优化步骤网店图片怎么制作

web/2025/10/3 15:51:13/文章来源:
网站常规seo优化步骤,网店图片怎么制作,深圳网站制作排行榜,wordpress的DUX主题1. 概念 享元模式是一种结构型设计模式#xff0c;它通过共享技术有效地支持大量细粒度对象的复用。 2. 原理结构图 图1 图2 2. 1 角色 抽象享元#xff08;Flyweight#xff09;#xff1a;这是所有具体享元类的基类#xff0c;它定义了享元对象的内部状态和外部状…1. 概念 享元模式是一种结构型设计模式它通过共享技术有效地支持大量细粒度对象的复用。 2. 原理结构图 图1 图2 2. 1 角色 抽象享元Flyweight这是所有具体享元类的基类它定义了享元对象的内部状态和外部状态以及需要实现的公共接口。外部状态通常以参数的形式通过方法传入。具体享元Concrete Flyweight这个角色实现了抽象享元中定义的接口具体的享元类包含了实现细节它们共享相同的内部状态但可以根据需要存储或计算外部状态。非享元Unsharable Flyweight代表不可以共享的外部状态这些状态是特定于上下文的因此不能共享。它们以参数的形式注入到具体享元的相关方法中。享元工厂Flyweight Factory用于构建一个池容器负责创建和管理享元对象。当客户端请求一个享元对象时享元工厂会检查系统中是否已存在符合要求的享元对象如果存在则提供给客户如果不存在则创建一个新的享元对象 2. 2 内部状态和外部状态 **享元模式的内部状态和外部状态是模式的核心概念**它们在实现对象共享和优化内存使用中起着关键作用。 内部状态 内部状态是享元对象的固有属性这些属性不会随着外部环境的变化而改变。它是可以共享的状态通常设计为不可变的属性以便于多个享元对象之间共享。例如在一个文档编辑器中字体或颜色方案可以是内部状态因为它们是共享的并且不会因为文档的不同部分而改变 外部状态 外部状态是随环境变化而变化的、不可以共享的状态。它通常是依赖于某个特定上下文的信息比如对象的位置或者是与其他对象的临时关系。在连接池的例子中连接的可用状态就是外部状态因为它会随着连接是否被使用而改变并且每个连接的可用状态是独立的不能共享。 举例 假设我们有一个在线字体库用户可以从字体库中选择字体并设置字体的颜色和大小。在这个例子中字体的字符集如宋体、黑体等就是内部状态因为这是字体对象固有的属性不随用户的操作而改变。而字体的颜色、大小等属性就是外部状态因为这些属性会随着用户的选择而改变。 3. 代码示例 3.1 示例1 使用享元模式实现一个字符渲染系统。在这个系统中有很多字符需要渲染但每个字符可能只是颜色或字体大小上有所不同而字符的形状本身是一样的。因此可以共享字符的形状而只存储不同的颜色或字体大小信息。 // Flyweight 接口 interface Flyweight {void operation(int extrinsicState); }// ConcreteFlyweight 类实现 Flyweight 接口 class UncheckedFlyweight implements Flyweight {private final String name;public UncheckedFlyweight(String name) {this.name name;}Overridepublic void operation(int extrinsicState) {System.out.println(Displaying name with extrinsic state extrinsicState);} }// FlyweightFactory 类用于创建和管理 Flyweight 对象 class FlyweightFactory {private final MapString, Flyweight flyweights new HashMap();public Flyweight getFlyweight(String key) {Flyweight flyweight flyweights.get(key);if (flyweight null) {flyweight new UncheckedFlyweight(key);flyweights.put(key, flyweight);}return flyweight;} }// Client 类使用 Flyweight 对象 class Client {private final FlyweightFactory factory;public Client(FlyweightFactory factory) {this.factory factory;}public void display(String key, int extrinsicState) {Flyweight flyweight factory.getFlyweight(key);flyweight.operation(extrinsicState);} }public class FlyweightPatternDemo {public static void main(String[] args) {// 创建 FlyweightFactory 实例FlyweightFactory factory new FlyweightFactory();// 创建 Client 实例Client client new Client(factory);// 使用 Client 显示字符传入不同的外部状态client.display(A, 1); // 显示字符 A使用外部状态 1可能是红色client.display(B, 2); // 显示字符 B使用外部状态 2可能是绿色client.display(A, 3); // 再次显示字符 A使用外部状态 3可能是蓝色} }运行FlyweightPatternDemo类的main方法将看到以下输出 Displaying A with extrinsic state 1 Displaying B with extrinsic state 2 Displaying A with extrinsic state 3在这个例子中尽管多次请求显示字符A但FlyweightFactory只创建了一个A字符对象并在后续请求中重复使用了它。这减少了内存中的对象数量提高了性能。同时通过传入不同的外部状态可以为同一个字符对象赋予不同的表现如不同的颜色或字体大小。 3.2 示例2 有一个简单的图形渲染系统其中有一些基础的图形如圆形、矩形可以共享而每个图形实例可以有不同的颜色、大小等属性。 // Flyweight 接口表示可共享对象 interface Flyweight {void draw(); }// UnsharedFlyweight 接口表示不可共享对象 interface UnsharedFlyweight {void setExtrinsicState(int state);void operation(); }// ConcreteFlyweight 类实现 Flyweight 接口 class ConcreteFlyweight implements Flyweight {private final String shape;public ConcreteFlyweight(String shape) {this.shape shape;}Overridepublic void draw() {System.out.println(Drawing shape);} }// ConcreteUnsharedFlyweight 类实现 UnsharedFlyweight 接口 class ConcreteUnsharedFlyweight implements UnsharedFlyweight {private int extrinsicState;Overridepublic void setExtrinsicState(int state) {this.extrinsicState state;}Overridepublic void operation() {System.out.println(Operating on unshared flyweight with extrinsic state extrinsicState);} }// FlyweightFactory 类用于创建和管理 Flyweight 对象 class FlyweightFactory {private final MapString, Flyweight flyweights new HashMap();public Flyweight getFlyweight(String key) {Flyweight flyweight flyweights.get(key);if (flyweight null) {flyweight new ConcreteFlyweight(key);flyweights.put(key, flyweight);}return flyweight;} }class GraphicsSystem {private final FlyweightFactory flyweightFactory;private UnsharedFlyweight unsharedFlyweight;public GraphicsSystem(FlyweightFactory flyweightFactory) {this.flyweightFactory flyweightFactory;}public void setUnsharedFlyweight(UnsharedFlyweight unsharedFlyweight) {this.unsharedFlyweight unsharedFlyweight;}public void drawShape(String shapeKey, int extrinsicState) {Flyweight flyweight flyweightFactory.getFlyweight(shapeKey);flyweight.draw();if (unsharedFlyweight ! null) {unsharedFlyweight.setExtrinsicState(extrinsicState);unsharedFlyweight.operation();}} }public class FlyweightPatternDemo {public static void main(String[] args) {// 创建 FlyweightFactory 实例FlyweightFactory flyweightFactory new FlyweightFactory();// 创建 GraphicsSystem 实例GraphicsSystem graphicsSystem new GraphicsSystem(flyweightFactory);// 创建非共享的 UnsharedFlyweight 对象UnsharedFlyweight unsharedFlyweight new ConcreteUnsharedFlyweight();graphicsSystem.setUnsharedFlyweight(unsharedFlyweight);// 使用 GraphicsSystem 绘制不同的形状并设置非共享对象的状态graphicsSystem.drawShape(Circle, 1); // 绘制圆形设置非共享对象状态为 1graphicsSystem.drawShape(Rectangle, 2); // 绘制矩形设置非共享对象状态为 2graphicsSystem.drawShape(Circle, 3); // 再次绘制圆形设置非共享对象状态为 3} } 当运行main方法时会看到以下输出 Drawing Circle Operating on unshared flyweight with extrinsic state 1 Drawing Rectangle Operating on unshared flyweight with extrinsic state 2 Drawing Circle Operating on unshared flyweight with extrinsic state 3在这个输出中可以看到 对于圆形和矩形由于它们是可共享的所以FlyweightFactory只创建了一个实例并在后续的调用中返回了相同的实例。对于非共享对象每次调用drawShape方法时都设置了不同的状态并进行了操作。 这个示例展示了享元模式在资源受限的情况下如何有效地重用对象同时保留了处理特定外部状态或行为的能力。通过区分共享和非共享对象可以在提高性能和减少内存消耗的同时保持代码的灵活性和扩展性。 4. 优缺点 主要作用 通过共享对象来减少内存使用和提高性能。 优点 减少内存消耗通过共享对象可以显著减少系统中对象的数量从而节省内存空间。这在处理大量相似对象时尤为有效如数据库连接池、线程池等场景。提高系统性能由于减少了对象的创建和销毁享元模式可以提高系统的响应速度和性能。在高并发场景下如电商网站的购物车或在线游戏的排行榜这种性能提升尤为显著。支持对象共享通过将对象的状态分为内部状态和外部状态享元模式可以实现对象的可共享性。这使得多个对象可以共享相同的内部状态而保持各自独立的外部状态。 缺点 实现较为复杂享元模式需要将对象的状态分为内部状态和外部状态这可能需要额外的设计和编程工作。同时使用工厂类来管理共享对象也可能增加实现的复杂性。可能影响系统维护性将对象状态分为内部和外部状态可能会增加系统的复杂度使得系统的维护和理解变得更加困难。此外如果过度使用享元模式可能会导致代码的可读性和可维护性下降。可能降低代码可读性由于享元模式使用工厂类来管理共享对象可能会增加代码的抽象层次和间接性从而降低代码的可读性。对于不熟悉该模式的开发人员来说理解和维护代码可能会更加困难。 5. 应用场景 5.1 主要包括以下几个方面 大量共享对象的场景在系统中存在大量共享对象时如数据库连接池、线程池等可以通过享元模式实现对象的共享减少对象的创建和销毁提高系统的性能和可扩展性。大数据量的场景处理大量数据的系统中往往存在大量重复对象如图像处理中的像素点、文本处理中的单词等。这些对象可以通过享元模式进行共享减少对象的创建和内存消耗提高系统的性能和可扩展性。高并发的场景高并发系统如电商网站的购物车、在线游戏的排行榜等存在大量的请求和对象。通过享元模式共享这些对象可以减少对象的创建和销毁从而提高系统的并发处理能力和响应速度。分布式系统中的对象共享在分布式系统中存在大量对象需要在不同节点间共享如分布式缓存系统、分布式锁等。享元模式可以有效地支持这些对象在分布式环境中的共享。 5.2 实际应用 五子棋游戏在五子棋游戏中可以使用享元模式来表示棋子。由于棋盘上可能存在大量重复的棋子例如黑棋或白棋享元模式可以通过共享相同的棋子对象来减少内存占用。在这个场景中棋子类可以作为抽象享元角色而具体的颜色实例如黑棋或白棋则是具体享元角色。文档编辑器在文本编辑器或处理软件中可以使用享元模式来管理文本中的字符。由于同一个文档中可能包含大量重复的字符使用享元模式可以有效地减少内存消耗。在这种情况下字符类是抽象享元角色而具体的字符实例如’a’、‘b’、c’等是具体享元角色。网页开发在网页开发中可以使用享元模式来管理图标、图片或其他重复使用的图形元素。这有助于减少页面加载时间并降低服务器的带宽需求。网络游戏在多人网络游戏中可以使用享元模式来管理游戏中的角色、道具等资源。这有助于减少服务器的资源消耗并提高游戏的可伸缩性。电子商务平台在电子商务平台中可以使用享元模式来管理商品图片、评价等级图标等元素。这有助于减少页面加载时间并提高用户体验。 6. JDK中的使用 字符串池String PoolJava中的String类使用了一个内部的字符串池来管理字符串对象。当您创建一个新的String对象时如果相同的值已经存在于池中那么新的引用将指向池中的现有对象而不是创建一个新的对象。这通过String类的intern()方法实现该方法确保了相同内容的字符串共享同一个对象。Integer缓存对于整数类型的自动装箱操作Java内部维护了一个小的缓存通常是-128到127之间的整数当进行自动装箱时如果整数值在这个范围内将直接返回缓存中的对象而不是创建新的对象。Boolean值类似于IntegerBoolean类型的true和false在自动装箱时也是直接返回缓存中的实例不会创建新对象。 7. 注意事项 区分内外部状态确保对象的内部状态是共享的而外部状态是从外部传入的。内部状态是共享的关键而外部状态则是每个对象特有的。管理共享对象使用工厂模式来管理享元对象确保它们被正确地创建和复用。线程安全在多线程环境中要注意线程安全问题避免共享对象的状态被意外修改。节省内存享元模式通过复用对象来节省内存这在处理大量对象时尤其重要。理解概念“享”代表共享“元”代表对象。当系统中有大量对象消耗大量内存时可以考虑使用享元模式。不变属性存储享元对象应只存储不变的共享属性可变属性应由非享元类存储并通过享元工厂进行管理。

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

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

相关文章

广州seo网站推广费用软件项目管理计划书

接着前面的文章,这篇文章就来说说menory alignment -- 内存对齐. 一、为什么需要内存对齐? 无论做什么事情,我都习惯性的问自己:为什么我要去做这件事情? 是啊,这可能也是个大家都会去想的问题,…

iis 创建网站大连企业信息

181/2461/8938产品概述: E4990A 阻抗分析仪具有 20 Hz 至 120 MHz 的频率范围,可在宽阻抗范围内提供出色的 0.045%(典型值)基本准确度,并内置 40 V 直流偏置源,适用于元器件、半导体和材料测量。 无论研发、生产、质…

重庆知名做网站的公司北京移动端网站优化

参考链接 FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)_雷霄骅的博客-CSDN博客_av_malloc 内容介绍 内存操作的常见函数位于libavutil\mem.c中本文记录最常使用的几个函数: av_malloc()av_realloc()av_mal…

深圳网站设计公司专业吗中山网络公关

这份文件是关于DS3231SN芯片的数据手册,由Maxim Integrated公司生产。DS3231SN是一款高精度的I2C接口集成实时时钟(RTC)/温度补偿晶体振荡器(TCXO)/晶体的芯片。以下是该芯片的核心内容概述: 产品概述&…

张掖作风建设年网站备案网站制作

文章目录 功能描述实现代码 功能描述 有以下xml内容&#xff0c;需要转成String字符串。同时&#xff0c;要去掉文中所有格式。 <root><student><name>张三</name><sex>男</sex><age>16</age><class>1班</class>…

网站内嵌地图商丘网商丘网络第一媒体

文/圆梦志愿 伏老师众所周知&#xff0c;选科是我国新高考中最重要的事情之一&#xff0c;且涉及到了多门选考科目。其中&#xff0c;要数物理的话题性相对最强。那么&#xff0c;高考选科是不是物理特别重要&#xff1f;新高考没有选物理是不是完了&#xff1f;一、高考选科是…

三门峡市湖滨区建设局网站深圳网站seo关键词

4、zabbix添加监控项 nginx监控 在server上安装nginx 添加模板 浏览图形 mysql监控 zabbix自带mysql模板&#xff0c;所以可以在server1上直接做 创建数据库连接用户 percona数据库模板 清理掉mysql的模块链接 安装并配置好percona的数据库模板 测试脚本 删除tmp下的缓存文…

哪些网站可以做详情页洛阳做家教去什么网站

目录 前言 一、游戏规则 1.功能分析 2.玩法分析 3.胜负判定条件 二、游戏实现思路 三、代码实现与函数封装 1.项目文件创建 2.头文件说明 3.函数封装 1&#xff09;菜单实现 2&#xff09;进度条实现 3&#xff09;main函数实现 4&#xff09;Game函数 5&#xff0…

珠海网站建设技术支持迁西县住房和城乡规划建设局网站

12月6日&#xff0c;浙江省经信厅公示了2023年浙江省信息技术应用创新典型案例入围名单。本次案例征集活动&#xff0c;由浙江省经信厅、省密码管理局、工业和信息化部网络安全产业发展中心联合组织开展&#xff0c;共遴选出24个优秀典型解决方案&#xff0c;迪捷软件“基于全数…

全网营销网站建设惠城网站制作

在 C# 中&#xff0c;IServiceCollection 是 ASP.NET Core 中用于依赖注入的接口。依赖注入是一种设计模式&#xff0c;它允许对象之间的依赖关系由外部组件管理&#xff0c;而不是在对象内部直接创建它们的依赖项。IServiceCollection 接口用于注册和配置应用程序中的服务。 …

网站建设鼠标移动变颜色传奇176网页游戏

前情提要&#xff0c;如果看了书本&#xff0c;这个lab难度不高&#xff0c;但是如果不看书&#xff0c;难度还是挺高的&#xff0c;并且这个lab会用到cachelab中学到的东西&#xff0c;需要阅读 第十章&#xff1a;系统编程第十一章&#xff1a;网络编程第十二章&#xff1a;…

西宁网站建设最好的公司校园加盟网站建设

机器视觉应用开发是指利用计算机视觉技术进行图像或视频数据处理和分析&#xff0c;实现自动化、智能化的应用程序开发。下面是机器视觉应用开发的一般步骤和常见任务。 需求分析&#xff1a;明确开发的机器视觉应用的具体需求和目标&#xff0c;例如人脸识别、目标检测、图像分…

做英语四级题的网站谷歌广告上海有限公司官网

对于网页编程来说&#xff0c;最重要的就是存取和读写数据了。存储方式可能有很多种&#xff0c;可以是字符串、数组、文件的形式等&#xff0c;今天学习了数组&#xff0c;可以说是PHP的数据应用中较重要的一种方式。PHP的数组函数众多&#xff0c;下面是我学习的小结&#xf…

黄浦企业网站制作wordpress添加语系

添加系统用户 useradd samba 添加samba用户 smbpasswd -a samba 激活samba用户 smbpasswd -e samba 1.winr运行secpol.msc打开本地安全策略 2.安全策略->本地策略->安全选项 3.右侧找到 网络安全:LAN管理器身份验证级别 打开 &#xff0c;选择 仅发送NTLMv2响应&#xf…

app下载官方网站英文外贸网站制作

[vue] 说下你对指令的理解&#xff1f; 指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式 (v-for 是例外情况&#xff0c;稍后我们再讨论)。指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&a…

医院网站建设联系方式营销型网站建设公司排名

Typescript允许你覆盖它的判断&#xff0c;并且能以任何你想要的方式分析它&#xff0c;这种机制被称为类型断言。 类型断言的两种方式&#xff1a; 1.as关键字 interface SquareConfig {color?: string;width?: number; }function createSquare(config: SquareConfig) {/…

企业门户网站需求模板网站建设开发方案

toFixed() 转载于:https://www.cnblogs.com/ytg1120/p/7101317.html

怎样创办一个网站重庆网络公司流程

这是Project Student的一部分。 其他帖子包括带有Jersey的Webservice Client&#xff0c;带有Jersey的 Webservice Server和带有Spring Data的Persistence 。 RESTful Webapp洋葱的第三层是业务层。 这就是应用程序的精髓所在–编写良好的持久性和Web服务层受到约束&#xff0…

乌镇网站建设标书网络营销手段有哪些

一、什么是湖仓一体&#xff08;Lakehouse&#xff09;&#xff1f; 湖仓一体是一种融合了数据湖的灵活存储能力与数据仓库的高效分析功能的现代数据架构。它通过整合两者的优势&#xff0c;解决了传统架构的局限性&#xff0c;为企业数据处理提供了更全面的解决方案。 数据湖…

学校集约网站建设我做的网站怎样被百度收录

在本文中&#xff0c;我们将看到作为JEP 286的一部分提出的名为Local Variable Type Inference的Java10功能。 从Java的第一个版本开始&#xff0c;它是一种强类型语言&#xff0c;在这里我们需要提及每种变量数据类型。 我们所有人都感到Java是冗长的语言&#xff0c;并期望精…