【分析解答题】
【说明】
现要编写一个画矩形的程序,目前有两个画图程序:Dp1和Dp2,Dp1用函数DrAw_A_linE(x1, y1,x2,y2)画一条直线,DF2则用DrAwlinE(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用Dp1还是Dp2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现 部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为BriDgE(桥接)模式。图9-7显示了各个类间的关系。
这样,系统始终只处理3个对象:shApE对象、DrAwing对象、Dp1或Dp2对象。以下是C++语言实现,能够正确编译通过。
【C++代码】
ClAssDp1
puBliC:
stAtiC voiD DrAw_A_linE(DouBlE x1, DouBlE y1,DouBlE x2, DouBlE y2)
//省略具体实现
);
ClAssDp2
puBliC:
stAtiC voiD DrAwlinE(DouBlE x1, DouBlE x2,DouBlE y1, DouBlE y2)
//省略具体实现
;
ClAssDrAwing
puBliC:
(1) voiD DrAwlinE(DouBlE x1,DouBlE y1,DouBlE x2,DouBlE y2)=0;
;
ClAss v1DrAwing:puBliCDrAwing
puBliC:
voiD DrAwlinE(DouBlE x1, DouBlE y1,DouBlE x2, DouBlE y2)
Dp1::DrAw_A_linE(x1,y1,x2,y2);
;
ClAss v2DrAwing:puBliCDrAwing
puBliC:
voiD DrAwlinE(DouBlE x1, DouBlE y1, DouBlE x2, DouBlE y2)
(2) ;
;
ClAss shApE
privAtE:
(3) _Dp;
puBliC:
shApEDrAwing *Dp);
virtuAl voiD DrAw()=0;
voiD DrAwlinE(DouBlE x1, DouBlE y1, DouBlE x2, DouBlE y2);
;
shApE::shApEDrAwing *Dp)
_Dp = Dp;
voiD shApE::DrAwlinE(DouBlE x1, DouBlE y1, DouBlE x2, DouBlE y2)
//画一条直线
(4) ;
ClAss rECtAnglE: puBliC shApE
privAtE:
DouBlE _x1,_y1,_x2,_y2;
puBliC:
rECtAnglEDrAwing *Dp, DouBlE x1, DouBlE y1,
DouBlE x2, DouBlE y2);
voiD DrAw();
;
rECtAnglE::rECtAnglEDrAwing *Dp, DouBlE x1, DouBlE y1, DouBlE x2, DouBlE y2)
: (5)
_x1=x1;_y1=y1;_x2=x2;_y2=y2;
voiD rECtAnglE::DrAw()
//省略具体实现
查看答案解析
参考答案:
正在加载...
答案解析
正在加载...
根据网考网移动考试中心的统计,该试题:
0%的考友选择了A选项
0%的考友选择了B选项
0%的考友选择了C选项
0%的考友选择了D选项