该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如下图所示的类图。
【正确答案】
【答案解析】interface;
void drawLine(double x1,double y1,double x2,double y2);
void drawCircle(double x,double y,double r);
DP1.draw_a circle(x,y,r);
DP2.drawCircle(x,y,r);
abstract public void draw();
[解析] 本题考查Bridge桥接模式的概念及应用,将抽象与其实现解耦,使它们都可以独立地变化。大致意思是说:将一组实现与另一组使用他们的对象分离。Java语言中声明抽象函数时可利用abstract,且每个函数都需要声明访问类型。对照试题五的代码我们可以看出:第一个空为interface,这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类),Drawing是一个虚拟基类,里面包含了希望利用不同策略实现的算法,派生类V1Drawing,V2Drawing都派生自Drawing,对基类中希望实现的算法都作了具体实现,且它们都含有drawLine和drawCircle函数,所以Draw类中缺失的应该是这两个算法,于是第二处为“void drawLine(double x1,doubley1,doublex2,double y2);”,第三处为“voiddrawCircle(doublex,doubley,double r);”,DP1和DP2中包含了绘制Line和Circle的具体实现Static的方法,因此在V1Drawing、V2Drawing类中可以直接调用它们,第四处为“DP1.draw_a_circle(x,y,r)第五处DP2.drawCircle(x,y,r);”,Shape类派生出Rectangle和Circle类,里面都含有draw方法,但是具体draw方法的实现却不相同,所以第六处为“abstractpublicvoid draw”。