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