Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设计模式:创建一个对象的工厂_Java_Design Patterns - Fatal编程技术网

Java 设计模式:创建一个对象的工厂

Java 设计模式:创建一个对象的工厂,java,design-patterns,Java,Design Patterns,有一个独立的Java应用程序。其中有一个工厂方法,只调用一次,并且只创建一个对象(如果可以创建它的话)。我有两个问题-哪种模式更适合这个?其次,在这种情况下,将创建工厂的对象存储在工厂本身是否正确?设计模式是正确的。将物体像样品一样存放在工厂是正确的。使用singleton时,它会检查属性是否为null。如果属性为空,它将创建新对象。工厂似乎适合您的要求。 请注意,如果您想掌握所创建对象的实例数量,一种简单的方法是通过定义私有构造函数和创建对象的静态方法,将要创建的实例的类定义为工厂类本身。 请

有一个独立的Java应用程序。其中有一个工厂方法,只调用一次,并且只创建一个对象(如果可以创建它的话)。我有两个问题-哪种模式更适合这个?其次,在这种情况下,将创建工厂的对象存储在工厂本身是否正确?

设计模式是正确的。将物体像样品一样存放在工厂是正确的。使用singleton时,它会检查属性是否为null。如果属性为空,它将创建新对象。

工厂似乎适合您的要求。
请注意,如果您想掌握所创建对象的实例数量,一种简单的方法是通过定义私有构造函数和创建对象的静态方法,将要创建的实例的类定义为工厂类本身。
请注意,这种方式可能会在实现及其客户机之间产生强耦合。因此,您可以使用耦合性较低的解决方案,如依赖项注入或使用接口的实现。

当您只想创建一次对象,并且可以在整个应用程序中使用时,最好使用设计模式。如果您使用factory design模式仅创建一个对象并在整个应用程序中使用,则可以使用此模式

为了创建工厂对象的工厂,请使用设计模式。 我已经编写了60个Java/J2EE设计模式


请参阅链接-

在Java中创建单个对象最常见的模式是。根据记录的模式,单例模式的目的如下:

确保一个类只有一个实例,并提供一个全局实例点 访问它

创建单例对象有两种方法:急切地创建和懒散地创建。即时实例化很简单,因为它相当于创建一个对象并通过getter返回:

public EagerSingleton {

    private static final EagerSingleton INSTANCE = new EagerSingleton();

    private EagerSingleton() {}

    public static EagerSingleton getInstance() {
        return INSTANCE;
    }
}
如果对象的创建是昂贵的(因此应该尽可能地延迟),或者如果有一个合理的机会,对象可能永远不需要,那么延迟实例化单例可能是一个好主意。这是一个看似困难的任务,因为多个线程可能会访问延迟实例化的对象,而实现必须确保只创建一个对象,而不管访问该对象的并发线程数是多少(即,如果两个线程都看到未创建单例,则只应创建一个对象,而不是两个,并由两个线程使用)

实现惰性单例的安全方法如下:

public class Singleton  {   

    private static class SingletonHolder {    
        public static final Singleton instance = new Singleton();
    }    

    public static Singleton getInstance() {    
        return SingletonHolder.instance;    
    }    
}

这确保在调用
getInstance
之前不会创建嵌套的静态对象。此方案有许多优化,但除非性能非常需要,否则应使用上述方法。此模式的自定义实现很难保证安全。

您可能希望共享代码以演示到目前为止,您做了“[…]在本例中,将创建工厂的对象存储在工厂本身是否正确?”-您指的是,对吗?通常,您没有单独的工厂类。如果工厂方法的对象太复杂,通常会部署。备注:动态创建单例可能很困难。