【问题标题】:Does this class makes any sense to anyone这门课对任何人都有意义吗
【发布时间】:2013-10-09 11:35:43
【问题描述】:

我是一个肮脏的 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..

【问题讨论】:

  • 在哪个库中可以找到工厂类?这似乎是一种 IoC / 依赖注入模式。
  • eatableMango 位是最令人困惑的位。试试edibleMango,应该可以!
  • 看起来 MagoFactory 接受了 Func&lt;string, bool&gt;,他将其作为 lambda 表达式传入。如果您的问题源于 lambda 表达式或委托,那么网上有很多资源可以为您提供一个起点。
  • @musefan 应您的要求我将 eatableMango 更改为 DisposeMango
  • 我发现这段代码有一些缺陷。如果每种类型都拥有它的Factory,那么根本不需要工厂。工厂用于根据输入创建不同类型的实例。但是这个工厂似乎只创建了Mango。如果我错了,请纠正我。 Factory Pattern.

标签: c# design-patterns object-oriented-analysis


【解决方案1】:

很难帮助你,因为我不明白你不明白的东西。

当然,我不知道为什么原来的开发者费了这么大的劲,却没有费心使用依赖注入。

专门放大您的问题线:

Factory = new MangoFactory<IMango>((aBC, eatableMango) => new Mango(aBC, eatableMango));

我假设您知道什么是匿名委托,以及什么是 lambda 表达式。如果您不熟悉这些,那么 Igor 就是您的答案。

这基本上是单例工厂模式的“作为工厂方法的 lambda 表达式”子类。

我还假设在 MangoFactory 的某个地方有一个 Func 成员。这是 MangoFactory 用来生成新芒果的函数。

最终,所遵循的模式是(可能)以下行用于实例化 Mango:

var theMango = Mango.Factory.CreateMango("foo",true);

目标是隐藏 Mango 构造的细节。

【讨论】:

  • 我认为这是正确的答案,因为我不太了解代表,所以现在要做更多的研究
【解决方案2】:
Factory = new MangoFactory<IMango>((aBC, eatableMango) => new Mango(aBC, eatableMango));

使用 lambda 表达式,委托的语法糖

见文章http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多