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

admin2014-11-13  29

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

该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图17—2所示的类图。

[Java代码]
    (1)Drawing(
    (2)   ;
   (3)    ;
    }
    ciass DPI(
    static public void draw aline(double xl,double y1,double x2,double y2)
    (/*代码省略*/)
    static public void draw—a—circle(double x,double y,double r)(/*代码省略
*/)
    };
    Class DP2{
    static pubiic void drawline(double x1,double x2,double y1,double y2)
    (/*代码省略*/)
    static public void drawcircle(double x,double Y,double r)(/*代码省略*/)
    };
    class VlDrawing implements Drawing(
    public void drawLine(double xl,double yl,double x2,doubIe y2)(/*代码省
略*/)
    public void drawCircle(double X,double Y,double r)(    (4)  ;    )
    };
    class V2Drawing implementS Drawing(
    public void drawLine(double xl,double yl,double x2,double y2){/*代码省
略*/)
    public void drawCircie(doubie X,double y,double r)(    (5)  ;    )
    };
    abstract class Shape(
    private Drawing—dp;
    (6)   ;
    Shape(Drawing dp){_dp=dp;)
    publ ic void drawLine(double xl,double yl,double x2,double y2)(_
    dp.drawLine(x1,y1,x2,y2);)
    public    void drawCircle(double X,double    Y,double
r)(一dp.drawCircle(x,y,r);)
    };
    Class Rectangle extends Shape(
    private double_x1,_x2,_y1,_y2;
    public Rectangle(Drawing dp,double xl,double yl,double x2,double y2)
    {/*代码省略*/}
    public void draw()(/‘代码省略。/  )
    };
    ClasS Circle extends Shape{
    private double x,_y,_r;
    public Circle(Drawing dp,double x,double Y,double r)(/*代码省略*/
    }
    public void draw()(drawCircle(_x,_y,_r);  }
    };

选项

答案 (1)abstract C1as s; (2)publiC abstract void drawLine(double x1,double y1,double x2,double y2) ; (3)public absttact void drawCircle(double x,double y,double r); (4)DPI.draw—a—ircle(x,y,r);(5)DP2.drawCircie(x,y,r); (6)publiC abstract void draw();

解析 本题考查Bridge桥接模式的概念及应用,将抽象与其实现解耦,使它们都可以独立地变化。大致意思是说:将一组实现与另一组使用他们的对象分离。java语言中声明抽象函数用abstract,且每个函数都需要声明访问类型。对照试题五的代码我们可以看出:  (1)为abstract class;这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)Drawing~一个虚拟基类,里面包含了希望不同策略实现的算法,派生类V1Drawing,V2Drawing都派生19Drawing,对基类中的希望实现的算法都作了具体实现,且它们都含有drawLine和drawCircle函数,所~Draw类中缺失的应该是这两个算法,于是(2)public abstract void drawLine(double x1,double y1,double x2,double y2);(3)public abstract void drawCircle(double x,double y,double r);DPI$~IDP2包含了绘制Line和Circle的具体实现的Static方法,因此在VlDrawing,V2Drawing类中可以直接进行调用它们(4)
DPI.draw—a—circle(x,y,r)(5)DP2.drawCircle(x,y,r);Shape类派生出Rectangle和Circle类,里面都含有draw方法,但是具体draw方法的实现却不相同,所以(6)public abstract void draw。
转载请注明原文地址:https://jikaoti.com/ti/m0i7FFFM
0

相关试题推荐
最新回复(0)