解释器模式(Robot pattern)

namespace DesignPattern.Interpreter 

    
public abstract class Expression 
    

        
public abstract bool Interpret(); 
    }
 
 
    
public class Constant : Expression 
    

        
private bool m_val; 
 
        
public Constant(bool val) 
        

            
this.m_val=val; 
        }
 
 
        
public override bool Interpret() 
        

            
return this.m_val; 
        }
 
 
        
public override string ToString() 
        

            
return this.m_val.ToString(); 
        }
 
    }
 
 
    
public class And : Expression 
    

        
public Expression left,right; 
         
        
public And(Expression left,Expression right) 
        

            
this.left=left; 
            
this.right=right; 
        }
 
 
        
public override bool Interpret() 
        

            
return left.Interpret()&&right.Interpret(); 
        }
 
 
        
public override string ToString() 
        

            
return "("+this.left.ToString()+" && "+this.right.ToString()+")"
        }
 
    }
 
 
    
public class Or : Expression 
    

        
public Expression left,right; 
         
        
public Or(Expression left,Expression right) 
        

            
this.left=left; 
            
this.right=right; 
        }
 
 
        
public override bool Interpret() 
        

            
return left.Interpret()||right.Interpret(); 
        }
 
 
        
public override string ToString() 
        

            
return "("+this.left.ToString()+" || "+this.right.ToString()+")"
        }
 
    }
 
 
    
public class Not : Expression 
    

        
private Expression exp; 
 
        
public Not(Expression exp) 
        

            
this.exp=exp; 
        }
 
 
        
public override bool Interpret() 
        

            
return !exp.Interpret(); 
        }
 
 
        
public override string ToString() 
        

            
return "(! "+exp.ToString()+")"
        }
 
    }
 
 
    
public class Client 
    

        
public static void Main() 
        

            Expression exp
=new Or(new And(new Constant(true),new Constant(false)), 
            
new And(new Constant(true),new Not(new Constant(false)))); 
            Console.WriteLine(exp.ToString()
+"="+exp.Interpret()); 
        }
 
    }
 
}
 
posted @ 2007-02-07 10:36  大牛博客  阅读(272)  评论(0编辑  收藏  举报