.net(2003)里有两个工程甲和乙
甲工程中有类A,乙工程有类B和C
在类A中根据一个参数调用B对象和C对象的同名方法,
B bb = new B();
C cc= new C();
   if(pp==1)
   {
       bb.mmm();
   }
   else
   {
       cc.mmm();
   }
以后根据实际需要,可能会调用多个类,有没有办法可以避免改A类中的代码,不用再添加类似
else if(pp==3)
{
    dd.mm();
}
,
使用反射行吗?System.Reflection,但是效率太低啊
有没有好的思路?

解决方案 »

  1.   

    其实JAVA里面N多的反射,用的人还不是贼多,用反射也是可以的或者你也可以用一个代理类来判断
    IProject xx = ProjectDelegate.returnDelegate(pp);
    然后在这个里面专门些判断:-)
    这样就把业务给分离出来了
      

  2.   

    PS: 偶是看了GoF23后呼的想起来用代理模式滴,请高手来检验
      

  3.   

    如基类 
    class A
    {
      public abstract void mmm();}class B:A
    {
    public void mmm()
    {
    //do something
    }
    }class C:A
    {
    public void mmm()
    {
    //do ...
    }
    }使用如:
    A a = new B();
    a.mmm();
      

  4.   

    Avoid:
    有个疑问
    那我是不是还要:
    H h;
    if(pp==1){
    h = new B();
    }
    else if(pp==2){
    h = new C();
    }
    那这样不是还一样吗?以后添加新类,不是还要添加A类中的代码呢
      

  5.   

    比如说我得到一个对象,我不必关心它B类型还是C类型。我总能实现相应mmm()方法。
      

  6.   

    Avoid:
    你的意思是不是:
    H h;
    if(pp==1){
    h = new B();
    }
    else if(pp==2){
    h = new C();
    }
    h.mmm();
    就是说实际上要靠参数来判断是是实例化B还是C