簡體   English   中英

靜態與實例方法的使用

[英]Static vs Instance method usage

我有一個類有一些方法,我在代碼中使用。 他們的目標是生成一個對象並將其返回以供進一步使用。 我可以用兩種方式實現它。 第一種方法 - 將其設為靜態,如下所示:

public static class Builder
{
    public static MyObject BuildMyObject(Settings myEnumSetting, int someParam)
    {
        //Building object 
        return MyObject;
    }

    //Other methods          
}

其他方式 - 是使它像這樣的實例:

public class Builder
{
    public MyObject BuildMyObject(Settings myEnumSetting, int someParam)
    {
        //Building object 
        return MyObject;
    }

    //Other methods          
}

在第一種方式可以創建我的對象,如下所示:

MyObject obj = Builder.BuildMyObject(Settings.Worker,20);

在第二種情況下,我可以像這樣使用它:

MyObject obj = new Builder().BuildMyObject(Settings.Worker,20);

以下哪種方法對使用效率更高?

以下哪種方法對使用效率更高?

這取決於您的要求,如果您的類的唯一責任是創建一個對象並返回它,那么第一個選項與static類更好。

使用靜態方法更簡單。 實例方法為構建器的繼承層次結構打開,您可以使用某種依賴注入來選擇要使用的構建器。

如果靜態方法有效 - 現在就使用它。 您始終可以將靜態方法轉換為外觀,以便稍后隱藏繼承的構建器類的層次結構的詳細信息。

順便說一句:我使用名稱Factory而不是Builder因為這是工廠方法模式實現的一個例子。 Builder是另一種(更復雜的)模式。

您描述的概念稱為工廠模式。 通常,構建器不使用任何實例成員,因此它應該是靜態的。

當存在成​​員凝聚力時,應該使用實例( http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 ),例如,在同一組實例變量(字段)上運行的方法屬於一個實例。

如果這個類只返回一個新對象,那么我會認為靜態方式更好,因為你沒有在該類或其他東西中存儲數據。

因此靜態方式比另一方式更有效。 (我不認為創建這個類的10個對象會很有用)

你的班級是工廠類/模式

靜態(工廠)類的優點是,您可以跟蹤在某些靜態屬性中創建的對象。 根據您的要求,這可能非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM