Java 我不知道';我看不到flyweight图案的任何用途。它真的有用吗?

Java 我不知道';我看不到flyweight图案的任何用途。它真的有用吗?,java,object,design-patterns,flyweight-pattern,Java,Object,Design Patterns,Flyweight Pattern,要应用flyweight模式,我们需要将对象属性分为内在属性和外在属性。内部属性使对象唯一,而外部属性由客户端代码设置并用于执行不同的操作 但我的问题是,为什么我们不能将内在属性和外在属性都作为实例变量(参见下面的Email类),只在循环外创建一个对象,在循环中设置参数,然后发送多个具有不同参数的电子邮件呢 public class Test { public static void main(String[] args) { Email ob = new Email()

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

但我的问题是,为什么我们不能将内在属性和外在属性都作为实例变量(参见下面的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);
    }
}
公共类测试{
公共静态void main(字符串[]args){
Email ob=新电子邮件();
对于(int i=0;i<10;i++){
ob.sender=String.valueOf(i);
ob.sendmail();
}
}
}
公共类电子邮件{
公共字符串发送器;
public void sendmail()
{
System.out.println(“发送给发件人的电子邮件:“+发件人”);
}
}

有时候,模式并不明显,但并不意味着它们是无用的。恐怕你对飞锤模式理解不正确

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


实际上,它是有用的。例如,JDK使用此模式提供
Integer
缓存(保留一个小范围的值以有效地返回)和
String
池(查看
intern()
方法)。

有时候,模式并不明显,但并不意味着它们是无用的。恐怕你对飞锤模式理解不正确

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

实际上,它是有用的。例如,JDK使用此模式提供
Integer
缓存(保留一个小范围的值以有效地返回)和
String
池(查看
intern()
方法)。

简单地告诉我们的是“不可变对象应该如何处理”

  • 如果某些类型的对象是不可变的(我通常希望所有对象都尽可能不可变)
  • 您在应用程序内部创建了一个对象,具有一些属性集,例如:一个不可变的
    对象是使用
    name=“John”,age=20创建的
  • 在应用程序执行一段时间后,您有了另一个与之完全相同的对象(
    name=“John”,age=20
  • 只需使用之前创建的一个,无需创建另一个(无需担心,因为它是,属性在之后不会更改)
因此,这基本上是一种节省内存的方法。它与对象定向无关

简单地说就是“不可变对象应该如何处理”

  • 如果某些类型的对象是不可变的(我通常希望所有对象都尽可能不可变)
  • 您在应用程序内部创建了一个对象,具有一些属性集,例如:一个不可变的
    对象是使用
    name=“John”,age=20创建的
  • 在应用程序执行一段时间后,您有了另一个与之完全相同的对象(
    name=“John”,age=20
  • 只需使用之前创建的一个,无需创建另一个(无需担心,因为它是,属性在之后不会更改)

因此,这基本上是一种节省内存的方法。它与对象定向无关

有时我看到人们强迫使用一种模式。@NikolasCharalambidis。。。在不必要的情况下,有时我看到人们强迫使用一种模式。@NikolasCharalambidis。。。在不必要的情况下,Flyweight不是一种模式,而是一种在Java中节省内存的方法。这与我无关oop@SupunWijerathne,flyweight是《可重用面向对象软件的元素》一书中的一种模式。说它不是一种模式,与OOP无关完全是胡说八道;而且这种模式不是Java特有的。GoF OOP模式与语言无关。@jaco0646不是特定于Java的:yh,我同意这一点,但要注意一点。但它肯定与OO无关。你为什么说这是胡说八道?那么它与OO有什么关系呢?设计模式是指考虑到软件的结构方面,为问题提供解决方案的模式。如果flyweight是一种模式,我认为没有错,如果有人说“合并排序”是一种模式。我想看看你的想法。:)事实上,Flyweight并不是一种模式,而是一种在Java中节省内存的方法。这与我无关oop@SupunWijerathne,flyweight是《可重用面向对象软件的元素》一书中的一种模式。说它不是一种模式,与OOP无关完全是胡说八道;而且这种模式不是Java特有的。GoF OOP模式与语言无关。@jaco0646不是特定于Java的:yh,我同意这一点,但要注意一点。但它肯定与OO无关。你为什么说这是胡说八道?那么它与OO有什么关系呢?设计模式是指考虑到软件的结构方面,为问题提供解决方案的模式。如果flyweight是一种模式,我认为没有错,如果有人说“合并排序”是一种模式。我想看看你的想法。:)