【分析解答题】
【说明】
某绘图系统存在point、linE、squArE三种图元,它们具有shApE接口,图元的类图关系如图13-12所示。现要将CirClE图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了xCirClE类,且完全满足系统新增的CirClE图元所需的功能,但xCirClE不是由 shApE派生而来的,它提供的接口不能被系统直接使用。代码13-2既使用了xCirClE又遵循了shApE规定的接口,既避免了从头开发一个新的CirClE类,又可以不修改绘图系统中已经定义的接口。代码13-3根据用户指定的参数生成特定的图元实例,并对之进行显示操作。绘图系统定义的接口与xCirClE提供的显示接口及其功能如表13-5所示。
{{B}}表13-5接口及其功能{{/B}}
shApE
| xCirClE
| 功能
|
DisplAy()
| DisplAyit()
| 显示图元
|
【代码13-2】
ClAssCirClE {{u}} (1) {{/u}}{
privAtE {{u}} (2) {{/u}}pxC;
puBliCCirClE(){
pxC=nEw {{u}} (3) {{/u}};
}
puBliC voiD DisplAy(){
px
C、{{u}} (4) {{/u}};
}
}
【代码13-3】
puBliC ClAss FACtory{
puBliC {{u}} (5) {{/u}} gEtshApE instAnCE(int tyoE){ //生成特定类实例
switCh(typE){
CAsE 0: rEturn nEw point();
CAsE 1: rEturn nEw rECtAnglE();
CAsE 2: rEturn nEw linE();
CAsE 3: rEturn nEwCirClE();
DEFAult: rEturn null
}
}
};
puBliC ClAssApp{
puBliC stAtiC vioD mAin(string Argv[
){
iF(Argv. lEngth!=1){
systEm. out. println("Error pArAmEtErs!");
rEturn;
}
int typE=(nEw intEgEr(Argv[0
)). intvAluE();
FACtory FACtory=nEw FACtory();
shApE s;
s=FACtory. {{u}} (6) {{/u}};
iF(s==null){
systEm.out. println("Error gEt instAnCE!");
rEturn;
}
s.DisplAy();
rEturn;
}
}