JavaJunior Asked:2020-03-14 00:30:50 +0800 CST2020-03-14 00:30:50 +0800 CST 2020-03-14 00:30:50 +0800 CST 工厂单身人士 772 有一个类 - 一个简单的工厂,其中实现了一个静态方法,该方法根据参数中接受的另一个对象的参数生成一个对象的实例。可以从不同的线程调用此方法。我需要让这家工厂成为单身人士吗?如果是,那为什么? шаблоны-проектирования 2 个回答 Voted Дмитрий 2020-03-14T00:56:32+08:002020-03-14T00:56:32+08:00 当然,最好注明您写作的语言。但我会在 PHP 中说。坦率地说,我很少看到带有静态方法的工厂,但这不是重点。根据所描述的应用程序,我个人认为将工厂设置为单例没有意义,原因很简单,静态方法属于类,而不是对象。那些。它就其本质而言存在于一个副本中。 Best Answer smellyshovel 2020-03-14T01:50:12+08:002020-03-14T01:50:12+08:00 单例是一种分代设计模式,它保证在单进程应用程序中会有某个类的单个实例,并提供对该实例的全局访问点。 来源。 纯粹从定义来看 -不,您不需要使用单例。 “单例”模式假设给定类只有一个实例。但是问自己一个问题:你需要这个实例吗? 有一个类 - 一个简单的工厂,其中实现了一个静态方法,该方法根据参数中接受的另一个对象的参数生成一个对象的实例。 假设这个静态方法是类中唯一的一个,那么根本不需要能够创建这个类的对象。相反,您可以使用简单的工厂函数。 class Fabric { static generate(template) { // ... } } Fabric.generate(instance); // думаю, можно безболезненно превратить в это: function generate(template) { // тот же код, что и в Fabric.generate(); } generate(instance); 此外,根据定义,不能在类的实例上调用静态方法,因此绝对不需要该类的单个实例,因为可以在类本身上调用工厂方法(此外,只有就可以了,因为它是静态的)。 因此,如果我是你,我绝对不会实现单例,而且我会考虑完全摆脱类的可能性。
当然,最好注明您写作的语言。但我会在 PHP 中说。坦率地说,我很少看到带有静态方法的工厂,但这不是重点。根据所描述的应用程序,我个人认为将工厂设置为单例没有意义,原因很简单,静态方法属于类,而不是对象。那些。它就其本质而言存在于一个副本中。
来源。
纯粹从定义来看 -不,您不需要使用单例。
“单例”模式假设给定类只有一个实例。但是问自己一个问题:你需要这个实例吗?
假设这个静态方法是类中唯一的一个,那么根本不需要能够创建这个类的对象。相反,您可以使用简单的工厂函数。
此外,根据定义,不能在类的实例上调用静态方法,因此绝对不需要该类的单个实例,因为可以在类本身上调用工厂方法(此外,只有就可以了,因为它是静态的)。
因此,如果我是你,我绝对不会实现单例,而且我会考虑完全摆脱类的可能性。