2012-09-20 32 views
4

我正在考慮創建沿着「一次性使用」的設計模式的一些課程,由以下特徵來定義:一次性使用對象:是或否?

  • 實例都被用於執行一些任務。
  • 實例只會執行一次任務。試圖撥打execute方法兩次會引發異常。
  • 在調用execute方法之前,可以修改屬性。事後再打電話也會引發例外。

簡約的實現可能是這樣的:

public class Worker 
{ 
    private bool _executed = false; 

    private object _someProperty; 
    public object SomeProperty 
    { 
     get { return _someProperty; } 
     set 
     { 
      ThrowIfExecuted(); 
      _someProperty = value; 
     } 
    } 

    public void Execute() 
    { 
     ThrowIfExecuted(); 
     _executed = true; 
     // do work. . . 
    } 

    private void CheckNotExcecuted() 
    { 
     if(_executed) throw new InvalidOperationException(); 
    } 
} 

問題:

  1. 是否有一個名字呢?
  2. 模式或反模式?
+2

爲什麼不只有一個接受'timeout'作爲參數的函數呢?此外,您可能正在重新發明輪子:http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx – Matthew

+1

該示例是極簡主義的;在現實世界中,我設想了一種用法,其中方法注入不太合適。 「超時」只是第一個想到的隨機屬性名稱。讓我去Lorem Ipsum多一點。 –

回答

3

這看起來像是balking pattern的一種形式。

如果您的特定對象以這種方式行爲似乎是合乎邏輯的,我不會看到它的問題。

0

流的行爲方式有些類似(也可以使用Dispose/Close來鎖定它們以用於大多數操作)。所以它並不是完全令人驚訝的模式。

相關問題