火星文 技术研习社

Noname Cat, Keep Thinking
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
【Command 模式】

将这些命令封装成在一个类中,然后用户(调用者)再对这个类进行操作,这就是Command模式。

换句话说,本来用户(调用者)是直接调用这些命令的,使用Command模式,就是在这两者之间增加一个中间者,将这种直接关系拗断,同时两者之间都隔离,基本没有关系了。

目的是层次降低耦合度,提高可复用性。

【Mediator 中介者模式】

用一个中介对象来封装一系列关于对象交互行为.

为何使用Mediator?
各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可修改扩展性.

J2EE 的 View Controller 就是 Form 和 业务层之间的中介者。

【Strategy 策略模式】

实现在运行期间,可以自由切换算法的目的。

示例:

规则基类(抽象类)
public abstract class RepTempRule{

protected String oldString="";

public void setOldString(String oldString){
  
this.oldString=oldString; 
}

protected String newString="";
public String getNewString(){
  
return newString;
}



public abstract void replace() throws Exception;

}


一号规则
public class RepTempRuleOne extends RepTempRule{


public void replace() throws Exception{ 

  
//replaceFirst是jdk1.4新特性 
  newString=oldString.replaceFirst("aaa""bbbb"
  System.out.println(
"this is replace one");
   
}


}


二号规则
public class RepTempRuleTwo extends RepTempRule{


public void replace() throws Exception{ 

  newString
=oldString.replaceFirst("aaa""ccc"
  System.out.println(
"this is replace Two");
   
}


}


算法解决类
public class RepTempRuleSolve { 

  
private RepTempRule strategy;

  
public RepTempRuleSolve(RepTempRule rule){
    
this.strategy=rule;
  }

  
public String getNewContext(Site site,String oldString) {
    
return strategy.replace(site,oldString);
  }

  
public void changeAlgorithm(RepTempRule newAlgorithm) {
    strategy 
= newAlgorithm;
  }

}

调用示例

 
public class test{



  
public void testReplace(){

  
//使用第一套替代方案
  RepTempRuleSolve solver=new RepTempRuleSolve(new RepTempRuleSimple());
  solver.getNewContext(site,context); 

  
//使用第二套

  solver
=new RepTempRuleSolve(new RepTempRuleTwo());
  solver.getNewContext(site,context); 

  }

..

}