.NET Practice  
 

在类设计中,我们常常遇到这样的问题,类A的实现需要类B的一个实例来提供某种功能。例如,类A有一个方法:

 

public DataObject GetData (string id)

{

            B b = new B();

            return b.GetData(id);

}

 

需要类B的一个实例来实现数据的获取。类B的实例可以通过几种方法得到:

1、正如上述方法中所说,创建一个新的实例。

2、通过构造器, 方法,Property注入。

我们注意到,无论采用上述哪种方法,类B的类型信息都必须让类A可见,这就增加了类型之间的耦合度。

现在,我们使用指定(delegate)来把耦合度降低到方法层次。首先定义一个指定:

public delegate DataObject GetDataDelegate (string id)

 

然后在类A中定义一个Property

 

GetDataDelegate getData;

public GetDataDelegate GetData

{

            get{return getData;}

            set{getData=value;}

}

 

我们就可以动态地注入GetData功能了:

A a = new A();

B b = new B();

a.GetData += b.GetData;

 

这个设计的好处在于:

1、任何有着SignatureDataObject Methodstring id)的类型的实例都可以注入类型A的实例。

类型A不需要看见类型B
posted on 2006-12-21 23:31  Chester  阅读(795)  评论(9编辑  收藏  举报