阻止直接实例化的工厂类

时间:2010-10-24 03:30:08

标签: c# .net design-patterns

如何创建阻止直接实例化类的工厂类?

说,我有类评论,只能从一个类CommentFactory实例化。 我不希望评论能够直接实例化。

我想我可以这样做:

  public partial class Comment
  {
    private Comment(){}
    public Comment CreateComment(User user,string str)
    {
       Comment cmt=new Comment();
       user.AddComment(cmt);
       cmt.User=user;
       return cmt;       
    }
  }

这段代码是干净的吗?

现在,我面临的问题是,Comment是一个部分类,Linq对SQL进行了部分实现。和Linq to SQL创建了这个类的公共构造函数,那么我怎么能绕过这个呢?有没有'技巧'?

3 个答案:

答案 0 :(得分:0)

如果Comment和CommentFactory在同一个程序集中,那么使Comment的所有构造函数都会阻止程序集之外的任何代码创建Comment的实例。

答案 1 :(得分:0)

您可以将构造函数internal标记为CommentFactory所在的程序集,然后让使用者访问CommentFactory类。我不确定如何“强制”它。

答案 2 :(得分:0)

您要问的问题可以回答here。它并不完全相同,但解决方案几乎完全相同。

我认为至少有3个技巧可以解决您的问题,因此它会为您增加更多灵活性。