桥接模式类图与代码

欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表 7.7 所示。

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

桥接模式将抽象与其实现解耦,使它们都可以独立地变化。也就是说:将一组实现与另一组使用它们的对象分离。这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。

【Java代码】

复制代码
public abstract class Drawing {
 
	public abstract void drawLine(double xl,double yl,double x2,double y2);
 
	public abstract void drawCircle(double x,double y,double r);
}
 
public class DP1 {

	public static void draw_a_line(double xl,double yl,double x2,double y2){
        /*代码省略 */
    }
 
    public static void draw_a_circle(double x,double y,double r){
        /*代码省略 */
    }
}
 
public class DP2 {
 
	public static void drawLine(double xl,double x2,double yl,double y2) {
        /*代码省略 */
	}
 
	public static void drawCircle(double x,double y,double r) {
        /*代码省略 */
	}
}
 
public class V1Drawing extends Drawing {

	public void drawLine(double xl,double yl,double x2,double y2) {
		DP1.draw_a_line();
	}

	public void drawCircle(double x,double y,double r) {
		DP1.draw_a_circle(x,y,z);
	}
}
 
public class V2Drawing extends Drawing {
 
	public void drawLine(double xl,double yl,double x2,double y2){
 
        DP2.drawLine();
    }
 
    public void drawCircle(double x,double y,double r){
 
        DP2.drawCircle(x,y,z);
    }
}
 
public abstract class Shape {
 
	protected Drawing _dp;
 
	public abstract void draw();
 
	Shape(Drawing dp) {
 
		_dp = dp;
	}
 
    public void drawLine(double xl,double yl,double x2,double y2) {
        dp.drawLine(xl,y1,x2,y2);
    }

    public void drawcircle (double x,double y,double r) { 
        dp.drawcircle (x,y,r);
    }
}
 
public class Rectangle extends Shape {
 
    private double _xl,_x2,_yl,_y2;

    public Rectangle(Drawing dp,double xl,double yl,double x2,double y2){
        /*代码省略 */
    }

    public void draw(){
        /*代码省略 */
    }
}
 
public 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);
    }
}
相关推荐
shayudiandian几秒前
【Java】接口(Interface)
java
w***481几秒前
Spring Boot 整合 Druid 并开启监控
java·spring boot·后端
星尘库3 分钟前
怎么实现js混淆加密 每隔一段时间 会失效 需要重新加密使用
java·服务器·前端
Brduino脑机接口技术答疑4 分钟前
脑机接口数据处理连载(二) 数据源头解析:脑电信号的采集原理与数据特性
人工智能·python·算法·数据分析·脑机接口
白露与泡影4 分钟前
Java面试题2025最新、最全、最细(附答案)
java·开发语言
D***y20110 分钟前
SpringCloud篇(配置中心 - Nacos)
java·spring·spring cloud
吃着火锅x唱着歌10 分钟前
LeetCode 1010.总持续时间可被60整除的歌曲
算法·leetcode·职场和发展
风筝在晴天搁浅10 分钟前
代码随想录 198.打家劫舍
算法
weixin_5150397914 分钟前
互联网大厂面试:程序员二狗的搞笑经历
java·学习·面试·程序员·互联网·技术·故事