在许多时候,我们经常会碰到这样的问题:
根据给定的条件来生成不同的对象,我一般是这样:

class BaseClass{
   
public abstract void Do();
}
class Class1 : BaseClass{
  
public override void Do(){
    
  }
}
class Class2 : BaseClass{
   
public override void Do(){
      .
   }
}

再做一个工厂类根据不同的条件生成不同的对象:

class Factory{
  
public static BaseClass Create(){
 
//get conditons
 if(conditon == 1){
        
return new Class1();
     }
     
else if(condition == 2){
        
return new Class2();
     }
}

用的时候可以这样:

class Client{
   
public void Process(){
      BaseClass bc 
= Factory.Create();
      bc.Do();
   }
}

但是有人在看了这段代码之后,说里面有if...else...,而面向对象的编程中可以利用设计模式来替换掉if...else...的代码,而代码中出现if...else...则意味着Bad Smell。可我不明白如何来替换这段代码,用抽象工厂吗?具体的工厂类是可以直接生成产品了,但是对条件的判断代码又转移到到底采用哪个具体工厂上去。
有人有好办法吗?

 

posted on 2005-08-20 16:14  linkin  阅读(3569)  评论(16)    收藏  举报