c# - 这门课对任何人都有意义吗

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

我是一个肮脏的 c# 程序员,今天我正在研究一个高级开发人员的代码,我意识到他们把每一个“东西”都变成了一个对象“一个类”,并遵循像“抽象工厂”这样的模式,并创建了接口(interface)、抽象基类等 我发现很难完全理解代码,以及抽象和接口(interface) + 工厂关系背后的原因。 我观看了视频并分别理解了它们,但当我试图在这种情况下理解它们时,我感到很沮丧。

回到问题(因为隐私我更改了对象名称)

这是我无法理解的类的一部分,因为它应用了什么模式或原则,

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..

最佳答案

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

当然,我不知道原开发者为什么要这么麻烦,却没有使用依赖注入(inject)的麻烦。

专门放大您的问题行:

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

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

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

我还假设在 MangoFactory 的某处有一个 Func 成员。这是 MangoFactory 用来生成新 Mangos 的函数。

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

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

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

关于c# - 这门课对任何人都有意义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19270948/

相关文章:

c# - Breeze js-如何添加新的子实体并将其附加到父级的子实体集合

c# - 如何在 asp.net 的 cmd.parameters.addwithvalue() 中一次绑定(bind)多个值

c# - 从 EF 迁移脚本中查找目录路径的最佳方法是什么?

ant - 混淆 ANT 模式语法和可能的变体

java - 如何集成来自两个不同 NLP 工具的两个解析树数据结构

javascript - 将 C# 3D 数组移植到 JS 3D 数组

javascript - 用于并行加载依赖数据源的 Coffeescript/Javascript 设计模式

c++ - 两个类,其中一个类具有指向另一个类的指针

php - 公共(public)属性无法访问面向对象的 PHP