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/1/visual-studio-2008/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_Programming Languages - Fatal编程技术网

Oop 创建对象的正确方法是什么?

Oop 创建对象的正确方法是什么?,oop,programming-languages,Oop,Programming Languages,例如,当我创建一个对象时,如果它有一个任务的逻辑路径,我会看到我自己在做这样的事情 public Class Link { public Link(String value) { callMethodA(value) } public void callMethodA(String data) { CallMethodB(doSomethingWithValue) } ... ... } 在这里

例如,当我创建一个对象时,如果它有一个任务的逻辑路径,我会看到我自己在做这样的事情

public Class Link
{
    public Link(String value)
    {
        callMethodA(value)
    }

    public void callMethodA(String data)
    { 
        CallMethodB(doSomethingWithValue)
    }
    ...
    ...
}
在这里,您可以看到,只要实例化对象,您的任务就会自动完成

我可以看到的另一种方法是创建一个不通过构造函数链接的对象,然后分别调用方法

哪个是对的,为什么


谢谢你给了我们这样的机会


构造函数应该完成使对象完整所需的所有操作。也就是说,如果没有调用方法
callMethodA
,如果对象不完整,则必须从构造函数本身调用
callMethodA
。如果callMethodA是可选的API,那么class
Link
的用户可以在需要时调用该方法。

我更喜欢第二种方法。构造函数的工作是初始化类成员。任何更改对象状态的修改都需要由成员函数单独完成。

任何一种方法都可以实现


建议的方法是在构造函数中执行初始化之类的任务,其余的事情可以通过调用方法及其引用对象来实现。

只要创建的对象没有任何共同点,当前创建它们的方法就可以了。或者,当创建的对象之间存在相似性时,模式才有意义。它们将帮助您隔离始终相同的部分和定义对象之间差异的移动部分。

这取决于所涉及的业务逻辑。这两种方法都是可行的。若您想简单地初始化特定于实例的数据,那个么最好在构造函数方法本身中这样做,因为构造函数方法更具逻辑性和简单性。它将避免不必要地显式调用其他方法。若实例化数据是基于特定的业务条件,那个么最好在单独的方法中包含主要功能,然后从构造函数有条件地调用它。在这种情况下,这很容易管理。

构造函数旨在使对象处于正确的初始状态。所以,用它来达到这个目的。一般来说,只能使用构造函数来设置属性。基本计算也可以

我不建议调用非常耗时的方法,或者可能引发异常的方法(比如调用Web服务或访问文件)

当需要执行非常特殊的操作以使对象处于初始状态时,请将构造函数设置为私有,并使用静态方法创建对象

Calendar.getInstance();