Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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

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
Oop 在整个系统中创建具有相同参数的对象_Oop_Design Patterns_Parameters_Arguments_Instantiation - Fatal编程技术网

Oop 在整个系统中创建具有相同参数的对象

Oop 在整个系统中创建具有相同参数的对象,oop,design-patterns,parameters,arguments,instantiation,Oop,Design Patterns,Parameters,Arguments,Instantiation,我有一个执行非常特定任务的对象。要创建此对象,需要一些参数。我在系统的某些部分创建了一个新实例。但问题是。如果将来必须更改参数或参数,该怎么办?我需要在任何地方改变它。然后我想:“好吧,也许我可以把它的创建封装在一个类中,如果一些参数改变了,我就需要在一个地方改变它!” 这对我来说很有意义。真正的问题是,这个“包装器”对象是工厂吗?它的职责是“创建一个具有特定参数的新对象并返回它”。消费者只需使用此对象…您需要重构代码以避免重复,这本身可能会提高您的总体可维护性 如果这段重构代码正在创建对象,那

我有一个执行非常特定任务的对象。要创建此对象,需要一些参数。我在系统的某些部分创建了一个新实例。但问题是。如果将来必须更改参数或参数,该怎么办?我需要在任何地方改变它。然后我想:“好吧,也许我可以把它的创建封装在一个类中,如果一些参数改变了,我就需要在一个地方改变它!”


这对我来说很有意义。真正的问题是,这个“包装器”对象是工厂吗?它的职责是“创建一个具有特定参数的新对象并返回它”。消费者只需使用此对象…

您需要重构代码以避免重复,这本身可能会提高您的总体可维护性

如果这段重构代码正在创建对象,那么,是的,它是一个工厂。不管你怎么称呼它,你的代码现在结构更好了吗?那就做吧


然而,考虑到这是一个工厂研究与工厂相关的经典设计模式,并了解是什么导致人们使用这种模式的更复杂形式。决定你是否有任何力量引导他们使用“聪明”的工厂

您描述的问题是,当类的构造函数参数更改时,类的所有客户端都必须更改。引入工厂有助于防止客户端重新编译。但这真的解决了问题吗?如果修改要使用另一个参数构造的类,则必须在某个地方确定该参数,可能是在启动构造的客户端的上下文中。工厂类应该如何知道?客户是否需要向工厂传递任何上下文信息

构造对象需要哪些参数?客户机是否提供它们,或者对象是否可以预先创建,然后像注入工厂一样注入客户机(据我所知,后者似乎是这样)?考虑使用A。这常常使工厂过时

你为什么担心你的班级可能会改变?是不是因为你们班做的太多了?当心。在你的情况下,这也是一项有趣的研究


据我所知,工厂不一定能解决您所描述的问题。工厂负责从客户端创建对象,这样客户端就不必知道对象的具体类型。仅仅防止签名保持稳定也可以通过在单个对象中包装参数来实现。这也是众所周知的。但它也不能解决新参数从何而来的问题。

我想这将符合(非常简单)工厂的条件。您是否有可能在外部指定参数,并让工厂读取它们并相应地实例化?如果是这样的话,您可以允许修改行为而不更改代码(以可能难以阅读/理解的配置为代价)。实际上,它是一个每次都使用相同参数实例化的单个类。。。