【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);
}
..
}