我有一个下面的类,我实现为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模式问题,而是关于具体实现的问题
答案 0 :(得分:0)
这里你不应该有一个单身,因为你在概念上没有一个对象。
您应该公开公开该类型的构造函数,如果您真的需要它可能使用工厂Create
方法,然后调用每个单独初始化的WriteStateChangeEvent
(并通过外观它,不可变的实例。
拥有该类的单个实例代表该类的多个概念实例,只需简单地“重复使用”它就会让该类用户感到困惑并且非常容易出错。
如果存在任何在概念上与所有实例无关的状态,则可以在static
字段中表示。
替代方法,假设有一个其他重要原因,有一个单身,将完全删除Create
方法,并简单地将productId
作为参数传递给WriteStateChangeEvent
,所以您不再存储与概念实例相关联的状态。