2017-09-04 15 views
0

如果我有兩個方法的類,做不同的事情,但類屬性不會改變每次我調用這些方法時,該類是一個很好的候選人是單身?需要幫助瞭解單身人士和對象生命週期

例如:

class Foo { 

    public function doFirst($params); 

    public function doSecond(); 

} 

如果我請doFirst()方法在我的控制器,和doSecond()在我的視圖。這個班是單身人士嗎?我在想的是:如果我不改變類屬性(類的狀態),那麼我不需要它的兩個實例。這是正確的思維方式嗎?另外,singleton類只能配置一次,對嗎?所以如果我配置我的類一次,然後調用其方法2,它可以是一個單身。但是如果我在調用第二種方法之前需要重新配置類,它不能是單身?

我希望你明白我的問題,因爲我很困惑,不知道如何更好地問它。

+0

我只是將對象傳遞給控制器​​的視圖。 –

+0

這只是一個簡單的例子,我沒有解決這個問題。我的問題是關於單身和物體生命週期。在我打電話的地方doSecond不一定屬於我打電話給doFirst的控制器 – Anita

回答

1

您似乎認爲,只要方法不會改變狀態,或者只需要一個狀態,一個類就可以是單例。

但是,單例模式的目的是用來創建一個全局可變狀態,which is already quite "code-smelly" on its own。如果你的狀態是不可改變的,那麼static(或VB中的Shared)成員將會很好。

如果您的Foo類只有這兩種方法,我會將它們標記爲static(或VB中的Shared)。因爲它們似乎只是「輔助」方法,不需要任何「狀態」來運行。

如果你想調用第二種方法之前改變狀態,我建議你使用另一種模式,如dependency injection而不是單身人士。

+0

謝謝,我明白你的意思。如果我想創建不可變的對象,但是我想使用DI容器,那麼我可以在整個代碼中僅「實例化」接口,因此我可以輕鬆地更改實現。這有任何意義嗎 ? – Anita

+0

@Anita沒關係。然後使用DI。 – Sweeper