设计模式令人担忧

时间:2013-12-23 20:02:40

标签: oop design-patterns

我发现了一些非常类似于设计模式的东西。我正在做的是创建一个注入多个classess的实例。到目前为止它是一个DI,但它的独特之处在于,一个实例被输入多个依赖的classess:

var instance = new ClassA();

var dep1 = new DependentFoo(instance);
var dep2 = new DependentBar(instance);

我发现它现在对于两个示例情况很有用:

  1. 制作具有多个GUI模块的模块化代码时。我将当前工作数据的实例提供给不同的从属类,例如,当单击“新文件”时,基础数据被清除

  2. 在游戏开发中 - 当有许多不同的游戏模式时 - 每个都需要当前的地形实例 - 例如两种模式:道路建设模式和树木放置模式需要具有相同的实例,因为它们将在相同的数据。

  3. 我可能会详细说明这一点,但我的问题是:这是一个命名模式吗?我知道DI的工作原理是将依赖项放入类中。但在我的情况下,它会更进一步 - 将该实例用于多个依赖类。

4 个答案:

答案 0 :(得分:1)

它被称为对象组合,本身不是“设计模式”,而是构造代码的一种方式,因此您可以减少重复。那些坚信你正在做的事的人对SOLID和DRY的原则进行了阐述。如果您处于OO世界,这些都是好事。 (如果你在FP世界中,他们也是一个很好的哲学,虽然DI有时不受欢迎。)

答案 1 :(得分:1)

您可能想要查看Observer模式或MVC模式,因为这些是您似乎正在进行的。

答案 2 :(得分:1)

这不是特定的模式,AFAIK。通过DI提供共享资源只是一种方法或技术。 IoC框架称之为“生活方式”管理。

答案 3 :(得分:1)

现代IoC容器知道如何处理它。

它被称为

    位于温莎城堡的
  1. Lifestyles
  2. Ninject中的
  3. Scope
  4. Unity中的
  5. Lifetime Managers
  6. E.g。温莎城堡有Scoped Lifestyle。它确保已解析的实体在范围内相同。

    注册:

    Container.Register(Component.For<MyScopedComponent>().LifestyleScoped())
    

    用法:

    using Castle.MicroKernel.Lifestyle;
    
    using (Container.BeginScope()) //extension method
    {
        var one = Container.Resolve<MyScopedComponent>();
        var two = Container.Resolve<MyScopedComponent>();
        Assert.AreSame(one, two);
    
    } // releases the instance
    

    Bound Lifestyle用于确保已解析的实体在特定的根/图中是相同的。