享元设计模式2025年3月17日 | 阅读 7 分钟 与外观、适配器和装饰器模式一样,享元设计模式是一种结构型模式。当需要创建大量类对象时,就会应用享元设计模式。通过共享对象,享元设计模式有助于减轻内存压力,这对于嵌入式系统和移动设备等内存有限的设备至关重要。这是因为每个对象都会占用内存空间。在使用享元设计模式之前,必须考虑以下要素:
为了应用享元模式,我们必须将对象属性分为内部属性和外部属性。外部属性由客户端代码设置并用于各种目的,而内部属性则赋予对象独特的特性。例如,一个 Circle 对象可能具有颜色和粗细等外部属性。为了应用享元模式,我们必须构建一个享元工厂来生成共享对象。让我们举一个需要使用线和椭圆绘制某些东西的例子。因此,我们将拥有一个 Shape 接口及其具体实现,即 Line 和 Oval。Line 没有内部属性,而 oval 类将有一个来决定是否用指定的颜色填充椭圆。 Line.java Oval.java 享元工厂我们需要在享元工厂中维护一个对象映射,客户端应用程序不应该能够访问它,因为享元工厂将由客户端程序用于实例化对象。当客户端程序调用 HashMap 以检索对象实例时,应该始终返回该对象;如果找不到,则应该创建一个新对象,将其添加到 Map 中,然后返回。在生成对象时,我们必须确保考虑所有内部属性。以下是我们享元工厂类的代码。 请注意 getShape 函数如何使用工厂设计模式、Java 组合(形状映射)和 Java 枚举来实现类型安全。 享元设计模式客户端示例下面展示了一个使用享元模式实现的示例程序。Java DrawingClient。 DrawingClient.java 输出 Creating Line object Creating Oval object with fill=true Creating Oval object with fill=false 我使用随机数生成器为我们的框架创建了多种形状。如果您执行上面的客户端程序,您可能会注意到创建第一个 Line 对象以及填充为 true 和 false 的 Oval 对象存在延迟。之后,因为使用的是共享对象,所以程序运行速度很快。多次点击“绘制”按钮后,框架应类似于下图。 ![]() 到此为止,我们讨论了享元模式;在接下来的文章中,我们将研究其他设计模式。如果您喜欢,请在评论区告诉我们,并广为传播。 输出 Counter Terrorist Created Counter Terrorist with weapon Gut Knife| Task is DIFFUSE BOMB Counter Terrorist with weapon Desert Eagle| Task is DIFFUSE BOMB Terrorist Created Terrorist with weapon AK-47| Task is PLANT A BOMB Terrorist with weapon Gut Knife| Task is PLANT A BOMB Terrorist with weapon Gut Knife| Task is PLANT A BOMB Terrorist with weapon Desert Eagle| Task is PLANT A BOMB Terrorist with weapon AK-47| Task is PLANT A BOMB Counter Terrorist with weapon Desert Eagle| Task is DIFFUSE BOMB Counter Terrorist with weapon Gut Knife| Task is DIFFUSE BOMB Counter Terrorist with weapon Desert Eagle| Task is DIFFUSE BOMB 下一主题Java中的HMAC加密 |
问题陈述给定一个二进制字符串,我们需要找到给定二进制字符串中 0 和 1 的最大差值。在这里,我们将 0 视为 +1,将 1 视为 -1,然后寻找连续子数组的最大值。这个子数组的最大和……
阅读 4 分钟
Java 中的类型转换是开发人员将一种数据类型转换为另一种数据类型的基本概念。它对于在各种情况下处理数据至关重要,尤其是在处理不同类型的变量、表达式和方法时。在 Java 中,类型转换是...
阅读 6 分钟
描述:您有一个字符串,需要将其字符垂直打印,从左到右。字符数组可以称为字符串。在这种情况下,程序旨在垂直打印字母,从...
阅读 4 分钟
A 是声明新 Java 类的最常用关键字。类是包含代码块的容器,代码块包括字段、方法、构造函数等。类是创建对象的模板或蓝图。它...
阅读 2 分钟
在 Java 中,代码的大小取决于其功能。如果用户需要较小的功能,代码的长度会较短,易于测试。但如果用户在应用程序中需要更多的功能,代码会变得...
阅读 6 分钟
java.time.chrono.JapaneseDate 具有 isSupported() 方法。JapaneseDate 类用于确定给定的日历字段是否受支持。语法:public boolean isSupported(TemporalField field) 参数:上述函数允许我们检查给定的日期是否与此类型的日期兼容...
阅读 2 分钟
Java lang NoSuchMethodError 是运行时错误。当编译器找不到任何被调用的方法时,就会发生此错误。这是一个 Java 错误,当编译时存在的方法在运行时不存在时发生。换句话说,用户调用了...
7 分钟阅读
FloatBuffer put() 主要有两种方法,它们接受不同的参数。put(float f) put(int index, float f) i. put(float f) java.nio.FloatBuffer 类具有 put(float f) 函数。新生成的浮点缓冲区以指定浮点数写入当前位置,然后位置会递增...
5 分钟阅读
查找最小后缀翻转的问题涉及处理两个二进制字符串:初始字符串 s 和目标字符串 target。在这里,两个字符串的长度都为 n,并且初始字符串 s 是一个全零字符串(即,s = "000....
阅读 12 分钟
重叠区间问题是应用到调度应用程序中的一个重要的计算挑战,同时也应用于计算几何和范围合并任务。给定一个区间范围,目标是快速处理它们以进行合并区间检测。两个区间 [a,... (省略了其他部分)
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India