Ps:关于这个模式笔者实在是没办法顾名思义了
现有原有系统A,要求在A的基础上做升级,对A改进并加入新功能。大刀阔斧的直接在A上修改、扩展并不是一个很好的方案,改来改去很容易诱发未知的问题。如果弄一个“媒介”,由“媒介”和A交互,并向外提供相关接口给新的功能模块使用。这样,从分工和逻辑上都有优势。这种处理方式就是外观模式。
外观模式可应用于将不同的两个层次分离,也可用于子系统与原系统的嫁接……总之需要“桥梁”时,可考虑下它。
依然的代码时间:
①、老版本的系统#########################################
/**
* 老旧的系统
*/
public class OldSystem {
public void oldMethod1(){
System.out.println("1+2+3+4+...+9="+calculateSum());
}
public Integer calculateSum(){ //拙劣的计算方法,需要对其升级
return 1+2+3+4+5+6+7+8+9;
}
public void oldMethod2(){ //很老旧的方法,需要舍弃
System.out.print("这是一个很老旧的方法");
}
}
②、媒介#########################################
/**
* 媒介
*/
public abstract class Facade extends OldSystem {
@Override
public Integer calculateSum() { //对OldSystem的计算方法优化
int result = 0;
for(int i=1;i<10;i++){
result += i;
}
return result;
}
@Override
public void oldMethod2() { //废弃老旧方法
super.oldMethod2();
System.out.println(",该方法已废弃!");
}
public abstract void newMethod3(); //提供新的功能接口
}
③、新版本系统#########################################
/**
* 新系统,直接面向媒介
*/
public class NewSystem extends Facade {
@Override
public void newMethod3() { //新功能的具体实现
System.out.println("这是系统的功能!");
}
}
Ps:以这种方式,只要定义好Facade的接口,两组人可同时开发“媒介”和“新系统”。