《Java设计模式学习》桥接模式

在这里,包括在很多的书中,我们都会看到设计模式的Demo都很简单。但是我们在实际开发过程中,却往往很少用到类似的设计模式。

但是大家在看到这篇文章的时候,希望大家可以动手敲一下。也许在敲击的过程中,你能获取到一定的灵感,在未来的工作中能够有所帮助。

上面的这句话,在我最近的工作中也有很深的体会。学习设计模式,并不是意味着你一定要把设计模式搬到代码中去,而是要把代码设计逻辑学习清楚,能够让自己有更强大的逻辑思维。

文章目录

      • 什么是桥接模式
      • 怎么定义桥接模式
      • 总结

什么是桥接模式

桥接模式是一种常用的设计模式,它的主要作用是将抽象部分与实现部分分离开来,从而使得它们可以独立地变化。

在桥接模式中,抽象部分通常是指高层次的抽象类或接口,而实现部分通常是指底层次的具体实现类。通过将抽象部分和实现部分分离开来,桥接模式可以让它们独立地变化,从而达到让设计更加灵活、可扩展的目的。

例如,假设我们现在要设计一个图形绘制程序,其中包含多种图形类型,如矩形、圆形、三角形等等。我们希望能够让用户根据自己的需求来选择具体的图形类型,并且能够在不修改原有代码的情况下扩展新的图形类型。

怎么定义桥接模式

为了实现这个功能,我们可以使用桥接模式来设计我们的图形绘制程序,具体实现如下:

首先,定义一个图形抽象类,包含一个绘制方法和一个实现部分的引用成员变量。

public abstract class Shape {
    protected DrawingImplementor drawingImplementor;

    public Shape(DrawingImplementor drawingImplementor) {
        this.drawingImplementor = drawingImplementor;
    }

    public abstract void draw();
}

接着,定义一个绘制实现类的接口,包含两种绘制方法:绘制线条和绘制面积。

public interface DrawingImplementor {
    public abstract void drawLine();

    public abstract void drawArea();
}

然后,根据我们图形的不同形状,可以定义不同的具体实现类,如下所示:

public class RectangleDrawingImplementor implements DrawingImplementor {
    public void drawLine() {
        System.out.println("Drawing Rectangle Line");
    }

    public void drawArea() {
        System.out.println("Drawing Rectangle Area");
    }
}

public class CircleDrawingImplementor implements DrawingImplementor {
    public void drawLine() {
        System.out.println("Drawing Circle Line");
    }

    public void drawArea() {
        System.out.println("Drawing Circle Area");
    }
}

public class TriangleDrawingImplementor implements DrawingImplementor {
    public void drawLine() {
        System.out.println("Drawing Triangle Line");
    }

    public void drawArea() {
        System.out.println("Drawing Triangle Area");
    }
}

最后,我们可以定义不同的具体图形类,如下所示:

public class Rectangle extends Shape {
    public Rectangle(DrawingImplementor drawingImplementor) {
        super(drawingImplementor);
    }

    public void draw() {
        drawingImplementor.drawLine();
        drawingImplementor.drawLine();
        drawingImplementor.drawLine();
        drawingImplementor.drawLine();
        drawingImplementor.drawArea();
        System.out.println();
    }
}

public class Triangle extends Shape {
    public Triangle(DrawingImplementor drawingImplementor) {
        super(drawingImplementor);
    }

    public void draw() {
        drawingImplementor.drawLine();
        drawingImplementor.drawLine();
        drawingImplementor.drawLine();
        drawingImplementor.drawArea();
        System.out.println();
    }
}

public class Circle extends Shape {
    public Circle(DrawingImplementor drawingImplementor) {
        super(drawingImplementor);
    }

    public void draw() {
        drawingImplementor.drawLine();
        drawingImplementor.drawArea();
        System.out.println();
    }
}

现在,我们可以在客户端程序中使用这些类来画图了,如下所示:

public class Client {
    public static void main(String[] args) {
        DrawingImplementor rectangleDrawingImplementor = new RectangleDrawingImplementor();
        DrawingImplementor circleDrawingImplementor = new CircleDrawingImplementor();
        DrawingImplementor triangleDrawingImplementor = new TriangleDrawingImplementor();

        Shape rectangle = new Rectangle(rectangleDrawingImplementor);
        Shape circle = new Circle(circleDrawingImplementor);
        Shape triangle = new Triangle(triangleDrawingImplementor);

        rectangle.draw();
        circle.draw();
        triangle.draw();
    }
}

总结

在这个例子中,我们使用了桥接模式来将图形的抽象部分和实现部分分离开来,从而使得它们可以独立地变化。如果我们要增加一个新的图形类型,只需要实现相应的具体实现类,并定义一个新的具体图形类即可,而不需要修改原有的代码。这个例子展示了桥接模式的强大之处,使得设计更加灵活、可扩展。
使用设计模式,并不意味着要把设计模式搬到代码中去,而是需要将设计模式的思想理解。能够进行运用。
希望大家多多关注+点赞+收藏 ,你们的鼓励是我不断前进的动力!!!

你可能感兴趣的:(设计模式,java,java,设计模式,学习)