一次性物体:是或不是?

时间:2012-09-20 19:40:34

标签: c# oop design-patterns

我正在考虑按照以下功能定义的“一次性”设计模式创建一些类:

  • 实例用于执行某项任务。
  • 实例只执行一次任务。尝试两次调用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 个答案:

答案 0 :(得分:3)

这看起来像balking pattern的形式。

如果您的特定对象以这种方式行事似乎合乎逻辑,我认为它没有问题。

答案 1 :(得分:0)

Streams的行为方式有些类似(也可以使用Dispose / Close来锁定大多数操作)。所以这并不是令人惊讶的模式。