可能重复:
Factory pattern in C#: How to ensure an object instance can only be created by a factory class?
假设我有一个知道如何制作Square的Factory类。如果我觉得只有Factory类知道如何制作一个正方形并且我想阻止其他人(即使在同一个程序集中)创建一个正确的(如果有这样的东西)那么方法呢?
答案 0 :(得分:6)
根据您的具体情况,您可以这样做:
public class Square
{
// Only Square and classes nested within it can call this
private Square()
{
}
public class Factory
{
public Square CreateSquare()
{
return new Square();
}
}
}
然后:
Square.Factory factory = new Square.Factory();
Square square = factory.CreateSquare();
答案 1 :(得分:2)
您可以将工厂和类移动到程序集,并将类的构造函数标记为内部,以便只能从程序集中调用它。
请注意,这将允许其他程序集成员访问构造函数,而不仅仅是工厂。
这就是Lookup<TKey, TElement>
的工作原理。
答案 2 :(得分:2)
我看到的一种方式(使用工厂和同一程序集中的Square
)将工厂方法作为Square
类的静态方法移动,并仅向{{{}添加私有构造函数1}} class。
您还可以将Square
课程移动为Factory
的内部课程:
Square