什么是“静态工厂”方法?


当前回答

Java实现包含实用程序类Java .util. arrays和Java .util. collections,它们都包含静态工厂方法,它的示例和如何使用:

arrays . aslist(“1”、“2”、“3”) Collections.synchronizedList(..), Collections.emptyList(), Collections.unmodifiableList(…)(只是一些例子,可以检查javadocs mor方法的例子https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html)

java.lang.String类也有这样的静态工厂方法:

String.format(…),String.valueOf (. .), String.copyValueOf(…)

其他回答

与构造函数不同,具有名称,可以阐明代码。 不需要在每次调用时创建一个新对象-对象 如果需要,可以缓存和重用。 可以返回其返回类型的子类型-特别是,Can 返回调用方不知道其实现类的对象。 这是许多框架中非常有价值和广泛使用的特性 它们使用接口作为静态工厂方法的返回类型。

标准:/ / www.javapractices.com/topic/TopicAction.do ? Id = 21

工厂方法:将对象的实例化抽象出来的方法。一般来说,当你知道你需要一个实现接口的类的新实例,但你不知道实现类时,工厂是有用的。

这在处理相关类的层次结构时非常有用,GUI工具包就是一个很好的例子。您可以简单地对每个小部件的具体实现的构造函数进行硬编码调用,但是如果您想要将一个工具包交换为另一个工具包,那么您将有很多地方需要更改。通过使用工厂,您可以减少需要更改的代码数量。

我想我会在这篇文章中添加一些我所知道的东西。我们在最近的android项目中广泛使用了这种技术。除了使用new操作符创建对象,您还可以使用静态方法来实例化一个类。代码清单:

//instantiating a class using constructor
Vinoth vin = new Vinoth(); 

//instantiating the class using static method
Class Vinoth{
  private Vinoth(){
  }
  // factory method to instantiate the class
  public static Vinoth getInstance(){
    if(someCondition)
        return new Vinoth();
  }
}

静态方法支持有条件的对象创建:每次调用构造函数都会创建一个对象,但您可能不希望这样。假设你想检查一些条件,然后你想创建一个新对象。除非满足条件,否则不会每次都创建一个新的Vinoth实例。

另一个例子来自Effective Java。

public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
}

此方法将布尔原语值转换为布尔对象引用。boolean . valueof (boolean)方法说明了我们,它从不创建对象。静态工厂方法从重复调用中返回相同对象的能力允许类在任何时候对存在的实例保持严格控制。

与构造函数不同的是,静态工厂方法可以返回返回类型的任何子类型的对象。这种灵活性的一个应用是API可以返回对象,而不需要将它们的类设为公共。以这种方式隐藏实现类可以得到一个非常紧凑的API。

Calendar.getInstance()是一个很好的例子,它根据地区创建一个佛教日历,日本帝国日历或默认的格鲁吉亚日历。

另一个例子,我认为是单例模式,你使你的构造函数私有创建一个自己的getInstance方法,你确保,总是有一个实例可用。

public class Singleton{
    //initailzed during class loading
    private static final Singleton INSTANCE = new Singleton();

    //to prevent creating another instance of Singleton
    private Singleton(){}

    public static Singleton getSingleton(){
        return INSTANCE;
    }
}

如果类的构造函数是私有的,那么就不能从类的外部为类创建对象。

class Test{
 int x, y;
 private Test(){
  .......
  .......
  }
}

我们不能从上面的类的外部创建一个对象。所以你不能从类外访问x y。那么这门课有什么用呢? 下面是答案:FACTORY方法。 在上面的类中添加下面的方法

public static Test getObject(){
  return new Test();
}

现在你可以在这个类的外部创建一个对象。就像……

Test t = Test.getObject();

因此,通过执行类的私有构造函数返回类对象的静态方法称为FACTORY方法。

Java实现包含实用程序类Java .util. arrays和Java .util. collections,它们都包含静态工厂方法,它的示例和如何使用:

arrays . aslist(“1”、“2”、“3”) Collections.synchronizedList(..), Collections.emptyList(), Collections.unmodifiableList(…)(只是一些例子,可以检查javadocs mor方法的例子https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html)

java.lang.String类也有这样的静态工厂方法:

String.format(…),String.valueOf (. .), String.copyValueOf(…)