如何防止直接调用公共方法

时间:2014-06-20 18:59:27

标签: c# oop

我有一个下面的类,我实现为Singleton,并添加了几个方法来使用带参数和不带参数,省去了细节:

public class LogManager
{
    public static LogManager Instance
    {
        get
        {
            return instance;
        }
    }

    public LogManager Create(Guid productId)
    {
        _productId = productId;
        return Instance;
    }

    public LogManager Create()
    {
        return Instance;
    }

    public void WriteStateChangeEvent()
    {
    }
}

有没有办法直接限制调用Instance,因此可以像LogManager.Instance.Create(newProductId).WriteStateChangeEvent()LogManager.Instance.Create().WriteStateChangeEvent()一样调用它,但绝不会这样LogManager.Instance.WriteStateChangeEvent()

这不是一般的OOP Singleton模式问题,而是关于具体实现的问题

1 个答案:

答案 0 :(得分:0)

这里你不应该有一个单身,因为你在概念上没有一个对象。

您应该公开公开该类型的构造函数,如果您真的需要它可能使用工厂Create方法,然后调用每个单独初始化的WriteStateChangeEvent(并通过外观它,不可变的实例。

拥有该类的单个实例代表该类的多个概念实例,只需简单地“重复使用”它就会让该类用户感到困惑并且非常容易出错。

如果存在任何在概念上与所有实例无关的状态,则可以在static字段中表示。


替代方法,假设有一个其他重要原因,有一个单身,将完全删除Create方法,并简单地将productId作为参数传递给WriteStateChangeEvent,所以您不再存储与概念实例相关联的状态。

相关问题