1700476031
各位可能要问,为什么要增加一个构造函数?答案是为了提醒子类,你必须做这项工作,指定实现者,特别是已经明确了实现者,则尽量清晰明确地定义出来。我们来看具体的抽象化角色,如代码清单29-19所示。
1700476032
1700476033
代码清单29-19 具体抽象化角色
1700476034
1700476035
public class RefinedAbstraction extends Abstraction{
1700476036
1700476037
//覆写构造函数
1700476038
1700476039
public RefinedAbstraction(Implementor_imp){
1700476040
1700476041
super(_imp);
1700476042
1700476043
}
1700476044
1700476045
//修正父类的行为
1700476046
1700476047
@Override
1700476048
1700476049
public void request(){
1700476050
1700476051
/*
1700476052
1700476053
*业务处理……
1700476054
1700476055
*/
1700476056
1700476057
super.request();
1700476058
1700476059
super.getImp().doAnything();
1700476060
1700476061
}
1700476062
1700476063
}
1700476064
1700476065
想想看,如果我们的实现化角色有很多的子接口,然后是一堆的子实现。如果在构造函数中不传递一个尽量明确的实现者,代码就很不清晰。我们来看场景类如何模拟,如代码清单29-20所示。
1700476066
1700476067
代码清单29-20 场景类
1700476068
1700476069
public class Client{
1700476070
1700476071
public static void main(String[]args){
1700476072
1700476073
//定义一个实现化角色
1700476074
1700476075
Implementor imp=new ConcreteImplementor1();
1700476076
1700476077
//定义一个抽象化角色
1700476078
1700476079
Abstraction abs=new RefinedAbstraction(imp);
1700476080
[
上一页 ]
[ :1.700476031e+09 ]
[
下一页 ]