桥接模式类图与代码

欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表 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);
    }
}
相关推荐
lzb_kkk2 分钟前
【JavaEE】JUC的常见类
java·开发语言·java-ee
shymoy8 分钟前
Radix Sorts
数据结构·算法·排序算法
风影小子16 分钟前
注册登录学生管理系统小项目
算法
黑龙江亿林等保18 分钟前
深入探索哈尔滨二级等保下的负载均衡SLB及其核心算法
运维·算法·负载均衡
lucy1530275107921 分钟前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
爬山算法26 分钟前
Maven(28)如何使用Maven进行依赖解析?
java·maven
杜杜的man37 分钟前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
编程、小哥哥1 小时前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
2401_857439691 小时前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节