小编Cam*_*mpi的帖子

C#中的工厂模式:如何确保对象实例只能由工厂类创建?

最近我一直在考虑保护我的一些代码.我很好奇如何确保永远不能直接创建对象,而只能通过工厂类的某种方法创建.让我们说我有一些"业务对象"类,我想确保这个类的任何实例都有一个有效的内部状态.为了实现这一点,我需要在创建对象之前执行一些检查,可能在其构造函数中.这一切都没问题,直到我决定将此检查作为业务逻辑的一部分.那么,我如何安排业务对象只能通过我的业务逻辑类中的某种方法创建,但从不直接?使用C++的旧"朋友"关键字的第一个自然愿望是C#无法实现.所以我们需要其他选择......

让我们试试一些例子:

public MyBusinessObjectClass
{
    public string MyProperty { get; private set; }

    public MyBusinessObjectClass (string myProperty)
    {
        MyProperty = myProperty;
    }
}

public MyBusinessLogicClass
{
    public MyBusinessObjectClass CreateBusinessObject (string myProperty)
    {
        // Perform some check on myProperty

        if (true /* check is okay */)
            return new MyBusinessObjectClass (myProperty);

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这一切都没关系,直到你记得你仍然可以直接创建MyBusinessObjectClass实例,而无需检查输入.我想完全排除这种技术可能性.

那么,社区对此有何看法?

c# oop design-patterns factory

86
推荐指数
6
解决办法
5万
查看次数

标签 统计

c# ×1

design-patterns ×1

factory ×1

oop ×1