一分心灵的宁静

在滚滚红尘,繁杂人世里,能够保持一分心灵的宁静,随时回到自己的内心深处,细细品味生命的奥妙,无疑是一种修身养性的人生境界

导航

解释器模式(Robot pattern)

Posted on 2006-06-22 09:21  有缘无份  阅读(197)  评论(0编辑  收藏  举报
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()); 
        }
 
    }
 
}