Java结构型模式之桥接模式详解
概述
桥接模式是一种用于软件设计的结构型模式,最早由著名的设计模式书籍《设计模式:可复用面向对象软件的基础》中的Gamma等人提出。
桥接模式的主要目的是将抽象部分和实现部分分离,分别放在不同的类层次结构中,从而实现它们之间的独立变换。通过分离抽象部分和实现部分,可以使它们可以相对独立地变化,从而可以大大降低它们之间的耦合度,提高系统的可扩展性、可维护性。
结构
桥接模式的主要结构包括如下几个角色:
Abstraction(抽象部分)
抽象部分为桥接模式中的抽象类。它定义了一些抽象方法和属性,定义了一个指向 Implementor 类型对象的指针,但并不实现具体的方法,而是委派给 Implementor 类来实现。
RefinedAbstraction(扩充抽象)
扩充抽象是对抽象部分的具体实现。它实现了在抽象部分中定义的抽象方法,同时可以通过组合其他的类扩展自己的功能。
Implementor(实现部分)
实现部分是桥接模式中的实现类。它定义了一些基本的操作,但并不提供具体的实现。这些操作要交由 ConcreteImplementor 类来实现。
ConcreteImplementor(具体实现)
具体实现是实现部分的具体类。它对实现部分的操作进行了具体实现。
示例
下面是一个简单的示例,利用桥接模式实现不同颜色和形状的图形绘制:
// Implementor
interface Color {
void applyColor();
}
// ConcreteImplementor
class Red implements Color {
@Override
public void applyColor() {
System.out.println("red");
}
}
class Blue implements Color {
@Override
public void applyColor() {
System.out.println("blue");
}
}
// Implementor
interface Shape {
void draw();
}
// RefinedAbstraction
abstract class ShapeWithColor implements Shape {
protected Color color;
public ShapeWithColor(Color color) {
this.color = color;
}
@Override
public void draw() {
color.applyColor();
drawShape();
}
abstract void drawShape();
}
// ConcreteImplementor
class Circle extends ShapeWithColor {
public Circle(Color color) {
super(color);
}
@Override
void drawShape() {
System.out.println("draw a circle");
}
}
class Square extends ShapeWithColor {
public Square(Color color) {
super(color);
}
@Override
void drawShape() {
System.out.println("draw a square");
}
}
在上面的示例中,我们定义了两个 Implementor:Color 和 Shape,它们代表了颜色和图形的基本操作。我们还定义了两个 ConcreteImplementor:Red 和 Blue,分别代表了红色和蓝色。
在抽象部分中,我们定义了一个 ShapeWithColor 类,它基于 Shape 类型,同时需要一个 Color 类型的参数。它实现了 draw 方法,但具体的图形绘制操作 drawShape 需要由子类来实现。
最后,我们实现了两个扩充抽象:Circle 和 Square,它们代表了具体的图形。它们都继承了 ShapeWithColor 类型,因此可以在绘制图形时先绘制颜色。
下面是一个使用示例:
public static void main(String[] args) {
Shape circle = new Circle(new Red());
circle.draw(); // 输出 red draw a circle
Shape square = new Square(new Blue());
square.draw(); // 输出 blue draw a square
}
第一行代码创建了一个圆形,使用红色绘制。第二行代码创建了一个正方形,使用蓝色绘制。在执行 draw 方法时,输出了对应的颜色和图形类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java结构型模式之桥接模式详解 - Python技术站