我需要一个模式:
我正在使用 C#。
假设有三个 Actor ;吉姆、帕特和莎莉。 Pat 的工作是创建一个接口(interface)作为 Jim 和 Sally 之间的契约。 Sally 的工作是创建一个实现该接口(interface)的类,而 Jim 的工作是编写一个使用 Sally 的对象的类。
Jim 不应该知道 Sally 的具体对象,只知道它实现了公共(public)接口(interface)。
Pat 需要在契约(Contract)中包含一种方法,让 Jim 创建 Sally 的具体对象的实例,但作为接口(interface)引用。
没有办法在接口(interface)或抽象类中包含静态方法定义,因此您不能这样做:
public interface IFoo
{
public static IFoo CreateIFoo();
}
Pat 如何编写合约来保证 Sally 会为 Jim 创建一个方法来创建她作为接口(interface)引用的具体对象?
最佳答案
如果可能,请求 Sally 的实例:
class Jim
{
public Jim(Sally sally){ /* ... */ }
}
但是,如果 Jim 需要知道何时构建 Sally,您可以传入一个委托(delegate):
class Jim
{
private Func<Sally> _createSally.
public Jim(Func<Sally> createSally)
{
_createSally = createSally;
}
public void ConsumeSally()
{
Sally sally = _createSally();
/* ... */
}
}
最简单的用法:
var jim = new Jim( () => new Sally() );
您不需要一个类 (Pat) 来了解如何实例化 sally,除非它确实为您的代码增加了值(value)。无论哪种方式,您可能都不希望 Jim 知道 Pat,因此如果需要 Pat,这就是您想要的:
var jim = new Jim( () => Pat.GetSally() );
关于c# - 包含创建实例的方法的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154394/