桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,从而使它们可以独立地变化。这个模式的主要目的是解耦抽象和实现,使得它们可以独立地变化和扩展。
主要概念
- 抽象(Abstraction): 这是一个接口或抽象类,它定义了高层次的操作。
- 修正抽象(Refined Abstraction): 这是对抽象的具体实现,它可以扩展抽象的功能。
- 实现(Implementor): 这是一个接口或抽象类,它定义了具体的实现部分的接口。
- 具体实现(Concrete Implementor): 这是实现接口的具体类,它提供了实现细节。
结构
- Abstraction: 维护一个指向Implementor的引用,并定义一些操作。
- Refined Abstraction: 继承自Abstraction并实现其具体行为。
- Implementor: 定义了实现部分的接口,提供了实现的基本方法。
- Concrete Implementor: 实现了Implementor接口,并提供了具体的实现细节。
示例
假设你在开发一个图形绘制系统,你有不同的形状(如圆形和方形)和不同的绘制方式(如画笔或钢笔)。你可以使用桥接模式将形状和绘制方式分开,以便它们可以独立变化。
颜色
//颜色接口
public interface Color {
void applyColor();
}
//蓝色
public class Blue implements Color {
@Override
public void applyColor() {
System.out.println("应用蓝色");
}
}
//绿色
public class Green implements Color {
@Override
public void applyColor() {
System.out.println("应用绿色");
}
}
//红色
public class Red implements Color {
@Override
public void applyColor() {
System.out.println("应用红色");
}
}
形状
//行状抽象类
public abstract class Shape {
protected Color color;
protected Shape(Color color) {
this.color = color;
}
public abstract void draw();
}
//圆形
public class Circle extends Shape {
private int radius;
public Circle(int radius, Color color) {
super(color);
this.radius = radius;
}
@Override
public void draw() {
color.applyColor();
System.out.println("绘制圆形,半径为: " + radius);
}
}
//矩形
public class Rectangle extends Shape {
private int width;
private int height;
public Rectangle(int width, int height, Color color) {
super(color);
this.width = width;
this.height = height;
}
@Override
public void draw() {
color.applyColor();
System.out.println("绘制矩形,宽度为: " + width + " 高度为: " + height);
}
}
//正方形
public class Square extends Shape {
private int side;
public Square(int side, Color color) {
super(color);
this.side = side;
}
@Override
public void draw() {
color.applyColor();
System.out.println("绘制正方形,边长为: " + side);
}
}
//椭圆
public class Ellipse extends Shape {
private int majorAxis;
private int minorAxis;
public Ellipse(int majorAxis, int minorAxis, Color color) {
super(color);
this.majorAxis = majorAxis;
this.minorAxis = minorAxis;
}
@Override
public void draw() {
color.applyColor();
System.out.println("绘制椭圆,长轴为: " + majorAxis + " 短轴为: " + minorAxis);
}
}
演示
Shape redCircle = new Circle(10, new Red());
redCircle.draw();
System.out.println();
Shape greenRectangle = new Rectangle(20, 30, new Green());
greenRectangle.draw();
System.out.println();
Shape blueEllipse = new Ellipse(15, 10, new Blue());
blueEllipse.draw();
System.out.println();
Shape redSquare = new Square(5, new Red());
redSquare.draw();
通过这种方式,你可以在不修改Shape的情况下增加新的DrawingAPI实现,或者在不修改DrawingAPI的情况下增加新的Shape实现。
优点
- 解耦: 抽象和实现分离,使得它们可以独立变化。
- 灵活性: 可以在不修改已有代码的情况下添加新功能。
- 易于扩展: 通过增加新的实现或抽象类,可以方便地扩展系统功能。
缺点
- 复杂性增加: 引入了额外的类和接口,可能增加系统的复杂性。
- 学习曲线: 需要理解抽象和实现的分离,可能对初学者有一定难度。
桥接模式是一种强大的设计模式,它在需要将复杂系统分解为不同的部分并实现它们的独立变化时非常有用。
标签:桥接,Shape,模式,System,color,int,println,public From: https://www.cnblogs.com/20lxj666/p/18388635