阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表6.1所示。 该绘图软件的扩展性要求,将不断扩充

admin2014-05-07  37

问题 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】   
    欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表6.1所示。

    该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图6.1所示的类图。
  
    【Java代码】
    (1)Drawing{
    (2)    ;
    (3)    ;
    }
    clasS DP1{
    static public void draw_a_line(double x1,double y1,double x2,doubley2)
    {/*代码省略*/}
    static public void draw_a_circle(double x,double y,double r){/*代码省略*/}
    }
    clas S DP2{
    static public void drawline(double x1,double y1,double x2,double y2)
   {/*代码省略*/}
    static public void drawcircle(double x,double y,double r){/*代码省略*/}
    }
    class V1Drawing implements Drawing{
    public void drawLine(double x1,double y1,double x2,double y2){/*代码省略*/}
   public void draw Circle(double X,double Y,double r){    (4)    ;  }
    }
    clasS V2Drawing implements Drawing{
    public void drawLine(double xl,double yl,double x2,double y2){/*代码省略*/}
    public void drawCircle(double X,double Y,double r){    (5)    ;  }
    }
    abstract class Shape{
    private Drawing_dp;
    (6)    ;
    Shape(Drawing dp){_dp=dp;}
    publ ic void drawLine(double x1,double y1,double x2,double y2){
    dp.drawLine(x1,y1,x2,y2);  }
    public void drawCirle(double x,double y,double r){_dp.draw Circle(x,y,r);  }
    }
    clas S Rectangle extends Shape{
    private double_x1,_x2,_y1,_y2;
   
    publ ic Rectangle(Drawing dp,double x1,double y1,double x2,doubley2)
    {/*代码省略*/)
    public void draw(){/*代码省略*/}
    }
    clas S Circle extends Shape{
    private double X,一Y,一r;
    public Circle(Drawing dp,double X,double Y,double r)
  {/*代码省略*/  }
    public void draw(){drawCirle(_x,  _y, _r);    )
    }

选项

答案(1)interface (2)void drawLine(double xl,double y1,double x2,double y2) (3)void drawCircle(double X,double y,double r) (4)DP1.draw a circle(x,y,r) (5)DP2.drawcircle(x,y,r) (6)abstract public void draw()

解析 本题考查桥接(Bridge)模式的概念及应用。
    Bridge模式可以将复杂的组件分成两个独立的但又相关的继承层次结构:功能性的抽象和内部实现。改变组件的这两个层次结构很简单,以至于它们可以相互独立地变化。
当具有抽象的层次结构和相应的实现层次结构时,Bridge模式是非常有用的。除了可以将抽象和实现组合成许多不同的类,该模式还可以以动态组合的独立类的形式实现这些抽象和实现。下图所示是Bridge模式的类图。

    在以下情况中,应该使用Bridge模式:
    想避免在抽象及其实现之间存在永久的绑定;
    抽象及其实现可以使用子类进行扩展;
    抽象的实现被改动应该对客户端没有影响,也就是说,不需要重新编译代码。
    本题中,类Shape对应上图中的Abstraction,表示抽象部分;类Drawing对应Implementor,表示实现部分。这两个类的子类分别表示具体的抽象部分和实现部分。类Drawing为具体的实现类提供统一接口,在Java中可以使用接口来实现。因此(1)、(2)、 (3)分别应为“interface”、“void drawLine(double x1,double y1,double x2,double y2)”、“void drawCircle(double x,double y,double r)”。
    V1Drawing是绘图实现类之一,它采用的绘图程序由是DP1所提供的。因此(4)处应为“DP1.draw a circle(x,y,r)”。同理(5)处应为“DP2.drawcircle(x,y,r)”。
    由类图可以看出,Shape类中定义的方法draw在其子类中被重置了,而Shape表示的是抽象部分,可以将draw方法定义为抽象函数。所以,(6)应该为“abstract public voiddraw()”。
转载请注明原文地址:https://jikaoti.com/ti/wji7FFFM
0

最新回复(0)