Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 设计模式关注_Oop_Design Patterns - Fatal编程技术网

Oop 设计模式关注

Oop 设计模式关注,oop,design-patterns,Oop,Design Patterns,我发现了一些非常类似于设计模式的东西。我正在做的是创建一个注入到多类中的实例。到目前为止,它是一个DI,但区别在于一个实例被送入多个依赖类: var instance = new ClassA(); var dep1 = new DependentFoo(instance); var dep2 = new DependentBar(instance); 目前,我发现它适用于两种示例情况: 使用多个GUI模块生成模块化代码时。我将当前工作数据的实例馈送到不同的依赖类中,因此,例如,当单击“新文

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

var instance = new ClassA();

var dep1 = new DependentFoo(instance);
var dep2 = new DependentBar(instance);
目前,我发现它适用于两种示例情况:

  • 使用多个GUI模块生成模块化代码时。我将当前工作数据的实例馈送到不同的依赖类中,因此,例如,当单击“新文件”时,底层数据将被清除

  • 在游戏开发中,当有许多不同的游戏模式时,每个模式都需要一个当前的地形实例,例如,两个模式:筑路模式和树木放置模式需要有相同的实例,因为它们将处理相同的数据


  • 我可能会对此进行详细阐述,但我的问题是:这是一个命名模式吗?我知道DI的工作原理是将依赖项放入类中。但在我的例子中,它更进一步——将该实例用于多个依赖类。

    它被称为对象组合,本身不是一种“设计模式”,而是一种结构化代码的方法,因此可以减少重复。那些完全相信你所做的事情的人阐述了固体和干燥的原理。如果你身处OO世界,这些都是好事。(如果你身处一个FP世界,它们也是一个很好的哲学,尽管DI有时会受到反对。)

    它被称为对象组合,本身不是一种“设计模式”,而是一种结构化代码的方式,因此你可以减少重复。那些完全相信你所做的事情的人阐述了固体和干燥的原理。如果你身处OO世界,这些都是好事。(如果你身处一个FP世界,它们也是一个很好的哲学,尽管DI有时是不受欢迎的。)

    您可能想查看Observer模式或MVC模式,因为它们似乎是您的目标。

    您可能想查看Observer模式或MVC模式,因为它们似乎是您的目标。

    这不是一个特定的模式,好吧。通过DI提供共享资源只是一种方法或技术。国际奥委会框架会称之为“生活方式”管理。

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

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

    它被称为

  • 温莎城堡
  • 在尼尼特
  • 团结一致
  • 温莎城堡里有一座城堡。它确保解析的实体在范围内是相同的

    注册:

    Container.Register(Component.For<MyScopedComponent>().LifestyleScoped())
    
    Container.Register(Component.For().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
    
    使用Castle.MicroKernel.lifety;
    使用(Container.BeginScope())//扩展方法
    {
    var one=Container.Resolve();
    var two=Container.Resolve();
    Assert.AreName(一,二);
    }//释放实例
    

    用于确保解析的实体在特定根/图中相同

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

    它被称为

  • 温莎城堡
  • 在尼尼特
  • 团结一致
  • 温莎城堡里有一座城堡。它确保解析的实体在范围内是相同的

    注册:

    Container.Register(Component.For<MyScopedComponent>().LifestyleScoped())
    
    Container.Register(Component.For().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
    
    使用Castle.MicroKernel.lifety;
    使用(Container.BeginScope())//扩展方法
    {
    var one=Container.Resolve();
    var two=Container.Resolve();
    Assert.AreName(一,二);
    }//释放实例
    

    用于确保解析的实体在特定根/图中相同

    DI也是一种对象组合,也许我不应该把DI称为一种设计模式?顺便说一句:DI是不受欢迎的,因为人们试图用它来做任何事情,或者将单元测试置于程序核心功能之上。我也反对这种说法——单元测试永远不会解决任何实际问题。@lukasz1985单元测试将解决许多实际问题。事实上,单元测试一直在解决实际问题,特别是那些坐在键盘和椅子之间的问题,或者至少证明代码本身不是问题。实际问题是由核心程序功能解决的问题。剩下的就是你说的程序员。如果程序员没有足够的智慧来找出他做错了什么,也没有完全理解他正在创建的底层系统,那么单元测试将永远不会有足够的帮助。只有当你真正关心真实生活的过程时,编程才能给你带来理解真实生活过程的乐趣。测试是好的——证明某些东西在工作。他们不能证明其他任何东西。DI也是一种对象组合,也许我不应该把DI称为设计模式?顺便说一句:DI是不受欢迎的,因为人们试图用它来做任何事情,或者将单元测试置于程序核心功能之上。我也反对这种说法——单元测试永远不会解决任何实际问题。@lukasz1985单元测试将解决许多实际问题。事实上,单元测试一直在解决实际问题,特别是那些坐在键盘和椅子之间的问题,或者至少证明代码本身不是问题。实际问题是由核心程序功能解决的问题。剩下的就是你说的程序员。如果程序员没有足够的智慧来找出他做错了什么,也没有完全理解他正在创建的底层系统,那么单元测试将永远不会有足够的帮助。只有当你真正关心真实生活的过程时,编程才能给你带来理解真实生活过程的乐趣。测试是好的——证明某些东西在工作。他们不能证明其他任何东西。这与MVC有一些相似之处,是的,特别是如果把我的例子中的“dep1”和“dep2”看作控制器,“instance”看作“model”。哟