新运营商在哪些方面被认为是有害的?

问题描述 投票:1回答:4

当使用new operator创建对象被认为是有害的时,应该使用工厂模式。新运营商在什么情况下被认为是有害的

java factory-pattern
4个回答
4
投票

new不被视为有害。

如果要创建类的新实例,则需要在某处使用new。无论你是否在工厂中使用new都是一个设计/架构问题。

您可能指的是在整个地方“newing up”(通过使用new SomeClass(..)创建实例)实例,通常被认为是糟糕的设计/不良实践。原因在于,将来更改实现可能会更困难,因为所有类都是紧密耦合的。使用的一个非常常见的参数/示例是测试。如果直接在代码中创建新实例,则可能更难以单独测试该代码和/或使用某些类的模拟。

我建议您阅读使用Dependency Injection的(和反对)参数。

有时你不能依赖注入你班级的单个实例。有时您需要能够根据需要创建新实例(或多个)。在这些情况下,如果您想避免直接使用new,那么查看各种工厂模式作为提取创建新实例的责任的方法是有意义的。

您是否遵循此类行为完全取决于您和/或您的团队。


1
投票

使用工厂模式的主要原因是对象不需要很多构造函数;

public Person(int age, String firstName, String lastName);
public Person(int age, String firstName, String middleName, String lastName);
public Person(int age, String firstName, String lastName, String socialNumber);
....

使用工厂模式,您可以创建许多不同的对象,这些对象使用不同的参数进行初始化,而无需编写如此多的构造方法。

new object()通常用于创建对象的实例以使用它的非静态方法。我读到了使用new运算符的一些问题以及它如何分配堆内存(你可能不希望这样)。忽略使用new没有问题。


0
投票
        Using of new operator directly is hardcoding. 
        It also means that class is not following single responsibility principle.

        Factories along with interfaces allow long term flexibility.
     It allows decoupling and therefore more testable design.  
        It allows you to introduce an Inversion of Control (IoC) container easily
        It makes your code more testable as you can mock interfaces
        It gives you a lot more flexibility when it comes time to change the application (i.e. you can create new implementations without changing the dependent code). 
Hope this helps.

0
投票

框架需要为一系列应用程序标准化架构模型,但允许各个应用程序定义自己的域对象并提供其实例化。

通常,用Java或某些语言创建对象的方式如下:

SomeClass someClassObject = new SomeClass();

上述方法的问题在于使用SomeClass’s对象的代码现在突然变得依赖于SomeClass的具体实现。使用new创建对象没有任何问题,但它带来了将我们的代码紧密耦合到具体实现类的包袱,这可能偶尔会出现问题。

© www.soinside.com 2019 - 2024. All rights reserved.