我没有看到任何享元模式的使用。真的有用吗?

Thi*_*han 1 java design-patterns object flyweight-pattern

要应用享元模式,我们需要将 Object 属性分为内在和外在属性。内在属性使对象独一无二,而外在属性由客户端代码设置并用于执行不同的操作。

但我的问题是为什么我们不能同时拥有内在和外在属性作为实例变量(请参阅下面的电子邮件类),而只能在循环外创建一个对象并在循环中设置参数并使用不同参数发送多封电子邮件。

public class Test {
    public static void main(String[] args) {
        Email ob = new Email();
        for (int i = 0; i < 10; i++) {
            ob.sender = String.valueOf(i);
            ob.sendEmail();
        }
    }
}

public class Email {
    public String sender;
    public void sendEmail()
    {
        System.out.println("Email sent to sender:"+sender);
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*lko 5

有时,模式并不明显,但这并不意味着它们没有用。恐怕您对享元模式的理解有误。

主要思想是通过共享之前已经使用过的相同对象来最小化内存使用。通常,内部有一个数据结构负责保存值并根据某些标准返回它们。它查找已经存在的元素,而不是创建一个新元素。

实际上,它很有用。例如,JDK 使用这种模式来提供Integer缓存(保留一小部分值以有效地将它们返回)和String池(查看intern()方法)。