ObjectBuilder之创建策略祥解()        

                                                                      Written by 浪子    

 

2、单件实例策略(SingletonStrategy):

 

       预备知识:

              在使用单件实例策略(SingletonStrategy),必需要先了解ObjectBuilder的另2个模块:

A、 定位器Locator

关于定位器的原理及实现不在本文的讨论内容,请参考niwalker的专栏之ObjectBuilder技术内幕Terrylee .NET设计模式(11):组合模式(Composite Pattern

B、生存周期ILifetimeContainer:

LifetimeContainer主要用来跟踪对象的生存周期,负责对象的销毁动作。我们在这里只要将它当成一个简单的对象容器来用就可以了,类似Hashtable

      

单件实例策略:

       策略方针:


      

       [浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)


[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)public class SingletonPolicy : ISingletonPolicy



可见SingletonPolicy很简单只是设置了一个标识。这个标识将在对象创建中决定是否采用单件实例策略

 

       单件策略:

 

      
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)

[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)public class SingletonStrategy : BuilderStrategy
}


      

我想细心的你一定发现了,这里面跟TypeMappingStrategy中不一样的地方了:

SinglotenPolicy不见了?那是否SinglotenStrategy不需要具体方针呢?起初我也这样认为,后来发现错了。

我们将眼光跳到CreationStrategy,我发现对象创建完之后会执行RegisterObject,将对象注册到定位器&生存周期容器里面。

 

[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)private void RegisterObject(IBuilderContext context, Type typeToBuild, object existing, string idToBuild)
}



 

这里好像显得有点藕断丝连了,因为单件实例的策略方针跑到创建策略里面去起作用了:)
    先不管是否是松耦合,不过也可以看出,
ObjectBuilder对象的创建策略如何起作用都是通过各自相对的具体方针决定的。

 

应用实例:

 

我们还是利用祥解() 的实例进行改造:

 

具体代码如下:

 

[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)using System;
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
using System.Collections.Generic;
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
using System.Text;
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
using Microsoft.Practices.ObjectBuilder;
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
namespace TestBuilder


 看到这里,我想你应该知道如何应用它,或者你也知道你能怎么去用它了。

 比如维护一个类似全局变量的对象集合?

    Updated @ 2006.07.04
   
最近在做Web MVP架构的搭建,准备使用ObjectBuilder来组织对象的创建.
重温了一下ObjectBuilder的单件策略.用自己的理解自己的语言总结了一下:
创建一个对象,并把他缓存起来(对象池,类似连接池),等下一次需要创建相同对象的时候,再把这个对象取出来,而不是重新创建一个.(此时有一个疑问,如果是引用类型的,旧对象中的修改是否会影响到后面再次利用的对象的值)

相关文章:

  • 2022-12-23
  • 2021-05-17
  • 2022-03-03
  • 2021-09-05
  • 2022-12-23
  • 2021-09-20
  • 2021-09-15
猜你喜欢
  • 2021-10-26
  • 2022-01-10
  • 2021-07-23
  • 2021-05-01
  • 2021-12-01
相关资源
相似解决方案