作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试用 Java 创建享元对象。我在 Objective-C 中使用过类似的概念(Objective-C 中的单例类//我相信它们是同一回事)。
我试图在网上找到教程或示例或解释,以了解如何创建享元对象并使用它,但我在 Google 上搜索过,但找不到任何相关内容。我浏览了 10 页,它们基本上都是从一个解释这个概念的网站上抄袭的。我理解这个概念 - 我需要一些东西来帮助我/教我如何用 Java 实现它。
有人有任何建议/教程吗?
谢谢!
最佳答案
Wikipedia entry for the flyweight pattern有一个具体的 Java 示例。
编辑以尝试帮助 OP 理解模式:
正如我在下面的评论中所指出的,享元模式的要点是您共享某个事物的单个实例,而不是创建新的、相同的对象。
使用 Wiki 示例,CoffeeFlavorFactory
只会创建任何给定 CoffeeFlavor
的单个实例(这是在第一次请求 Flavor 时完成的)。对相同风格的后续请求返回对原始单个实例的引用。
public static void main(String[] args)
{
flavorFactory = new CoffeeFlavorFactory();
CoffeeFlavor a = flavorFactory.getCoffeeFlavor("espresso");
CoffeeFlavor b = flavorFactory.getCoffeeFlavor("espresso");
CoffeeFlavor c = flavorFactory.getCoffeeFlavor("espresso");
// This is comparing the reference value, not the contents of the objects
if (a == b && b == c)
System.out.println("I have three references to the same object!");
}
关于java - Java 享元示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7563435/
据我所知,对象池是一种创建模式,享元是一种结构模式,但实际上我看不出两者之间有太大区别。有人可以向我解释它们之间的区别以及每种方法在实现中何时有用吗? 最佳答案 一个区别在于享元通常是不可变的实例,而
字符串已经在使用享元设计模式。汇集常见的 String 对象是否有益/性能好?因为字符串已经从字符串池中提取出来了吗? 最佳答案 字符串可以来自很多地方,默认情况下只有字符串文字在字符串池中。例如,当
我是一名优秀的程序员,十分优秀!