我是一个肮脏的c#程序员,今天我正在经历一个高级开发人员的代码,我意识到他们把每个“东西”都作为一个对象“一个类”,并遵循“抽象工厂”之类的模式,创建接口,抽象基类等 我发现在我的脑海中有点难以理解代码,以及摘要和接口+工厂关系背后的原因。 我看了几个视频并单独理解它们,但是当我在这个场景中试图理解它们的时候,它会让我感到高兴。
回到问题(由于隐私,我更改了对象名称)
这是我无法理解的类的一部分,因为它已经应用了哪些模式或原理,
internal sealed class Mango : GenericMango, IMango
{
public static readonly IMangoFactory<IMango> Factory;
static Mango()
{ // this line below specially i don't understand
Factory = new MangoFactory<IMango>((aBC, disposeMango) => new Mango(aBC, disposeMango));
}
private Mango(string aBC, bool disposeMango)
: base(aBC, disposeMango)
{
}
// more methods and properties in here etc..
答案 0 :(得分:4)
很难帮助你,因为我不明白你不理解的东西。
当然,我不知道为什么最初的开发人员遇到了这个麻烦但却没有遇到使用依赖注入的麻烦。
专门针对您的问题行进行缩放:
Factory = new MangoFactory<IMango>((aBC, eatableMango) => new Mango(aBC, eatableMango));
我将假设您知道匿名委托是什么,以及lambda表达式是什么。如果你不熟悉这些,那么伊戈尔就是你的答案。
这基本上是“lambda表达式作为工厂方法”的单例工厂模式的亚种。
我也假设在MangoFactory的某个地方有一个Func&lt; string,bool,IMango&gt;会员。这是MangoFactory用于生成新Mangos的函数。
最终,遵循的模式是(可能)以下行是用于实例化芒果的模式:
var theMango = Mango.Factory.CreateMango("foo",true);
目标是隐藏芒果建筑的细节。
答案 1 :(得分:1)
Factory = new MangoFactory<IMango>((aBC, eatableMango) => new Mango(aBC, eatableMango));
使用lambda表达式,委托语法糖
请参阅文章http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx