要应用flyweight模式,我们需要将Object属性划分为内部属性和外部属性。内在属性使对象唯一,而外在属性由客户端代码设置并用于执行不同的操作。
但我的问题是为什么我们不能将内在属性和外在属性都作为实例变量(参见下面的Email类),只需在循环外创建一个对象并在循环中设置参数并发送多个具有不同参数的电子邮件。
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);
}
}
答案 0 :(得分:4)
有时候,模式并不明显,但并不意味着它们毫无用处。而且我害怕你错误地理解了飞重模式。
主要思想是通过共享之前已经使用过的相同对象来最小化内存使用。通常,内部有一个数据结构,负责保存值并按某些标准返回它们。它查找已存在的元素而不是创建新元素。
实际上,这很有用。例如,JDK使用此模式提供Integer
缓存(保留一小部分值以有效地返回它们)和String
池(查看intern()
方法)。 / p>
答案 1 :(得分:0)