设计模式-桥接模式

桥接模式是一种设计模式,它将抽象与实现分离,使两者可以独立变化。文章通过图形绘制的例子展示了如何使用桥接模式,其中抽象类Shape包含对实现类DrawingAPI的引用,允许不同图形类使用不同的绘制方法。这种模式有利于系统的扩展和维护,符合开闭原则。
摘要由CSDN通过智能技术生成

文章目录

第四章 桥接模式


目录


前言

桥接模式是一种结构型设计模式,它将抽象与实现分离,使它们可以独立地变化。该模式通过将抽象类与实现类之间建立一个桥接(Bridge)来实现解耦。

在桥接模式中,抽象类和实现类分别定义了自己的接口,它们通过桥接进行关联。抽象类中包含一个指向实现类的引用,通过这个引用,抽象类可以调用实现类的方法。

桥接模式的核心思想是将抽象和实现分离,使它们可以独立地变化。这样,当需要增加新的抽象或实现时,不会影响到其他已存在的抽象或实现。


一、桥接模式

下面以一个图形绘制的示例来说明桥接模式的使用。 首先,定义图形的抽象类 Shape

public abstract class Shape {
    protected DrawingAPI drawingAPI;
     protected Shape(DrawingAPI drawingAPI) {
        this.drawingAPI = drawingAPI;
    }
     public abstract void draw();
}

然后,定义绘制图形的接口 DrawingAPI : 

public interface DrawingAPI {
    void drawShape();
}

 接下来,实现具体的绘制图形的类 DrawingAPI1DrawingAPI2


public class DrawingAPI1 implements DrawingAPI {
    @Override
    public void drawShape() {
        System.out.println("Drawing shape using DrawingAPI1");
    }
}
 public class DrawingAPI2 implements DrawingAPI {
    @Override
    public void drawShape() {
        System.out.println("Drawing shape using DrawingAPI2");
    }
}

 最后,创建具体的图形类 CircleSquare ,它们继承自抽象类 Shape

public class Circle extends Shape {
    private double x, y, radius;
     public Circle(double x, double y, double radius, DrawingAPI drawingAPI) {
        super(drawingAPI);
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
     @Override
    public void draw() {
        System.out.println("Drawing Circle:");
        drawingAPI.drawShape();
    }
}
 public class Square extends Shape {
    private double x, y, side;
     public Square(double x, double y, double side, DrawingAPI drawingAPI) {
        super(drawingAPI);
        this.x = x;
        this.y = y;
        this.side = side;
    }
     @Override
    public void draw() {
        System.out.println("Drawing Square:");
        drawingAPI.drawShape();
    }
}

现在,我们可以使用桥接模式来绘制不同的图形了:

public class Client {
    public static void main(String[] args) {
        Shape circle = new Circle(1, 2, 3, new DrawingAPI1());
        circle.draw();
         Shape square = new Square(4, 5, 6, new DrawingAPI2());
        square.draw();
    }
}

 在上述示例中,抽象类 Shape 和实现类 DrawingAPI 之间建立了桥接关系。具体的图形类 CircleSquare 继承自抽象类 Shape ,并在绘制时调用了实现类 DrawingAPI 的方法。通过桥接模式,我们可以灵活地组合不同的图形和绘制方式,而不需要修改已存在的代码。


总结

桥接模式的优点包括:

1. 解耦抽象和实现:桥接模式将抽象部分和实现部分分离,使它们可以独立地变化。这样可以实现抽象和实现的解耦,使得它们可以独立地进行扩展和修改,而不会相互影响。

2. 扩展性强:桥接模式通过抽象部分和实现部分的分离,使得它们可以独立地进行扩展。在抽象部分和实现部分都可以添加新的子类,从而实现系统的灵活性和可扩展性。

3. 提高了系统的可维护性:桥接模式将抽象部分和实现部分分离,使得系统的结构更清晰,代码更易于理解和维护。当需要修改或扩展系统时,只需要修改和扩展相应的抽象部分和实现部分即可,不会对其他部分产生影响。

4. 符合开闭原则:桥接模式通过抽象和实现的分离,符合开闭原则。可以通过增加新的抽象部分或实现部分来扩展系统的功能,而不需要修改已有的代码。

总之,桥接模式通过将抽象和实现分离,提高了系统的灵活性、可扩展性和可维护性,符合面向对象设计的原则。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值