FAÇADE
该模式为一组具有复杂且全面的接口对象提供一个简单且特定的接口。
应用此模式后,App完全不知道JNDI的内部细节,JndiFacade隐藏了JNDI的复杂性,并对App提供简单的接口,对App来说,JNDI是不存在的。JndiFacade是JNDI的唯一代理。
Façade模式是以明显且受限的方式来施加它的策略。使用时必须主动地调用它,使用者必须理解该策略的使用含义。
MEDIATOR
该模式相对于Façade的显式策略,它是以隐藏的方式来施加策略。
public class TextValidMediator {
Text text;
Label label;
Validator validator;
public TextValidMediator(Text t, Label l, Validator v) {
text = t;
validator = v;
label = l;
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
String s = text.getText();
s = validator.valid(s);
if (s != null) {
label.setText(s);
}
}
});
}
}
使用时:
Validator valid = new Validator() {
public String valid(String input) {
String result = null;
try {
int i = Integer.parseInt(input);
if (i > 0 && i < 65534) {
return null;
}
} catch (NumberFormatException e) {
}
return "Invalid port ";
}
};
TextValidMediator mediator = new TextValidMediator(text, label, valid);
Validator是一个接口,子类实现它来满足具体的校验规则。TextValidMediator为Text添加输入数据的验证功能,如果在Text上输入,Validator会对输入的数据进行校验,如果有错误,就显示在Label上。TextValidMediator为Text注册了一个ModifyListener,一旦Text检测到输入有改变,就调用ModifyListener中的方法,通过Validator对象进行有效性校验。Text并不知道TextValidMediator的存在,也不知道要对其进行的校验规则,TextValidMediator是悄悄的把策略施加到Text上的。