考虑以下类结构。
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方法。
答案 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() { }
}
}