如何将对象创建限制为仅抽象工厂类?

时间:2016-10-16 14:23:59

标签: c# abstract-factory

考虑以下类结构。

fullWindow

我想将新的ClassA对象的创建仅限制为FactoryA类。如果尝试使用new关键字直接创建新的ClassA对象,则应该给出错误。

interface IClassA
{
    void methodA();
}

interface IFactoryA
{
    IClassA CreateClassA();
}
class ClassA : IClassA
{
    public void methodA() { }
}

class FactoryA : IFactoryA
{
    public IClassA CreateClassA()
    {
        return new ClassA();
    }
}

如何实现这一目标?我尝试使用带有私有构造函数和公共getInstance方法的修改单例对象但不是我想要的,因为客户端代码仍然可以直接调用getInstance方法。

1 个答案:

答案 0 :(得分:1)

将类的构造函数隐藏到外部是工厂类的核心要点:

interface IClassA
{
    void methodA();
}

interface IFactoryA
{
    IClassA CreateClassA();
}
class ClassA : IClassA
{
    internal ClassA() {}
    public void methodA() { }
}

class FactoryA : IFactoryA
{
    public IClassA CreateClassA()
    {
        return new ClassA();
    }
}

现在只有定义了ClassA的程序集才能创建该类的实例。这假设工厂在同一个程序集中。

但是,无法将方法的访问权限仅限于一个类或方法。

正如李指出的那样,你也可以把班级嵌入工厂:

class FactoryA : IFactoryA
{
    public IClassA CreateClassA()
    {
        return new ClassA();
    }

    class ClassA : IClassA
    {
        public void methodA() { }
    }   
}