一个类可以返回自己的对象

Ank*_*kur 5 oop

一个类可以返回自己的对象.

在我的示例中,我有一个名为"Change"的类,它代表对系统的更改,我想知道它是否反对设计原则返回一个Change类型的对象或一个ArrayList,其中填充了所有最近的Change对象.

Sco*_*son 6

是的,一个类可以有一个返回其自身实例的方法。这是一个很常见的场景。

在 C# 中,一个示例可能是:

public class Change
{
    public int ChangeID { get; set; }

    private Change(int changeId)
    {
        ChangeID = changeId;
        LoadFromDatabase();
    }

    private void LoadFromDatabase()
    {
        // TODO Perform Database load here.
    }

    public static Change GetChange(int changeId)
    {
        return new Change(changeId);
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*off 5

返回的另一个原因this是你可以进行功能链接:

class foo
{
    private int x;
    public foo()
    {
        this.x = 0;
    }

    public foo Add(int a)
    {
        this.x += a;
        return this;
    }

    public foo Subtract(int a)
    {
        this.x -= a;
        return this;
    }

    public int Value
    {
        get { return this.x; }
    }

    public static void Main()
    {
        foo f = new foo();
        f.Add(10).Add(20).Subtract(1);
        System.Console.WriteLine(f.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)
$ ./foo.exe
29

有时间和地点进行功能链接,并不是"随时随地".但是,LINQ是一个地方的一个很好的例子,巨大的功能链中受益.


pax*_*blo 4

是的,它可以。事实上,这正是单例类所做的。第一次调用其类级getInstance()方法时,它会构造自己的实例并返回该实例。然后后续调用getInstance()返回已构造的实例。

您的特定情况可以使用类似的方法,但您需要某种方法来确定最近更改的列表。因此,它将需要维护自己的此类更改列表。您可以使用静态数组或更改列表来完成此操作。只需确保列表中的基础信息不会消失 - 如果您维护指向对象的指针并且这些对象已被您的客户端释放,则在 C++ 中(例如)可能会发生这种情况。

在像 Java 这样的自动垃圾收集环境中问题较少,因为当仍然存在对它的引用时,对象不会消失。

但是,您不必使用此方法。我对你所描述的内容的偏好是有两个类,变更列表和变更。当您创建更改类的实例时,请向构造函数传递一个更改列表对象(如果您不希望它与更改列表关联,则为 null),并在返回之前将更改添加到该列表中。

或者,使用一个更改列表方法,该方法本身创建更改并返回它,并为了自己的目的而记住更改。

然后,您可以查询更改列表以获取最近的更改(无论您如何定义最近的更改)。这会更灵活,因为它允许多个列表。

如果需要,您甚至可以做得太过分,允许将更改与多个更改列表相关联。