类实例化的模式只来自一个地方?

Mat*_*ats 4 .net c# design-patterns class-design

C#.Net 4.0

我想知道我怎么能有一个只能从一个地方实例化的课程.一个例子:

我有一个Provider类.该类公开了一个名为GetData的方法.当的GetData被调用时,供应商将实例化一个数据类,填充并返回.该数据类不能被任何人不同,那么被实例化提供者,所以访问的数据将通过唯一的方式提供.一旦的GetData叫和呼叫者已经收到数据类的实例,他应该能够访问这个类的属性/方法.

如何才能做到这一点?有这种问题的模式吗?一个简短的样本将受到高度赞赏.提前致谢!

And*_*are 8

听起来你正在寻找工厂模式:

工厂模式是用于软件开发的创建设计模式,用于封装对象创建中涉及的过程.

基本上,您的Provider类是控制Data类实例创建的工厂.

你可以控制的一件事就是将这两种类型放在它们自己的程序集中,并使构造函数Data成为internal类本身public.这意味着任何引用程序集的人都将被迫使用Provider该类来创建实例Data(当然,除非他们使用反射).


Hos*_*Aly 6

另一个解决方案是创建一个接口IData,并声明该Provider.GetData方法返回IData而不是Data.然后你可以将你的Data类嵌套在里面Provider.这样,Data即使同一程序集中的类也无法实例化您的类.这是一个例子:

public interface IData
{
    // properties and methods
}

public class Provider
{
    public IData GetData()
    {
        return new Data();
    }

    private class Data : IData
    {
        // your implementation
    }
}
Run Code Online (Sandbox Code Playgroud)