1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
| /**
* 实现接口 - 绘图API接口
*/
public interface DrawingAPI {
void drawCircle(double x, double y, double radius);
void drawRectangle(double x, double y, double width, double height);
}
/**
* 具体实现 - OpenGL绘图API
*/
public class OpenGLDrawingAPI implements DrawingAPI {
@Override
public void drawCircle(double x, double y, double radius) {
System.out.printf("[OpenGL] 绘制圆形: 中心(%.1f, %.1f), 半径%.1f%n", x, y, radius);
}
@Override
public void drawRectangle(double x, double y, double width, double height) {
System.out.printf("[OpenGL] 绘制矩形: 起点(%.1f, %.1f), 宽%.1f, 高%.1f%n", x, y, width, height);
}
}
/**
* 具体实现 - DirectX绘图API
*/
public class DirectXDrawingAPI implements DrawingAPI {
@Override
public void drawCircle(double x, double y, double radius) {
System.out.printf("[DirectX] 绘制圆形: 中心(%.1f, %.1f), 半径%.1f%n", x, y, radius);
}
@Override
public void drawRectangle(double x, double y, double width, double height) {
System.out.printf("[DirectX] 绘制矩形: 起点(%.1f, %.1f), 宽%.1f, 高%.1f%n", x, y, width, height);
}
}
/**
* 抽象层 - 形状抽象类
*/
public abstract class Shape {
protected DrawingAPI drawingAPI; // 桥接:持有实现接口的引用
protected Shape(DrawingAPI drawingAPI) {
this.drawingAPI = drawingAPI;
}
public abstract void draw();
public abstract void resize(double factor);
// 可以在抽象层定义一些通用方法
public void changeDrawingAPI(DrawingAPI newAPI) {
this.drawingAPI = newAPI;
System.out.println("更换绘图API");
}
}
/**
* 精化抽象层 - 圆形
*/
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() {
drawingAPI.drawCircle(x, y, radius);
}
@Override
public void resize(double factor) {
radius *= factor;
System.out.printf("圆形大小调整为原来的%.1f倍%n", factor);
}
// 圆形特有的方法
public void setRadius(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
}
/**
* 精化抽象层 - 矩形
*/
public class Rectangle extends Shape {
private double x, y, width, height;
public Rectangle(double x, double y, double width, double height, DrawingAPI drawingAPI) {
super(drawingAPI);
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
@Override
public void draw() {
drawingAPI.drawRectangle(x, y, width, height);
}
@Override
public void resize(double factor) {
width *= factor;
height *= factor;
System.out.printf("矩形大小调整为原来的%.1f倍%n", factor);
}
// 矩形特有的方法
public void setDimensions(double width, double height) {
this.width = width;
this.height = height;
}
public double getArea() {
return width * height;
}
}
// 基础桥接模式演示
public class BasicBridgeDemo {
public static void main(String[] args) {
System.out.println("=== 桥接模式基础演示 ===");
// 创建不同的绘图API
DrawingAPI openGL = new OpenGLDrawingAPI();
DrawingAPI directX = new DirectXDrawingAPI();
System.out.println("\n=== 使用OpenGL绘制形状 ===");
Circle circle1 = new Circle(5, 5, 10, openGL);
Rectangle rect1 = new Rectangle(0, 0, 20, 15, openGL);
circle1.draw();
rect1.draw();
System.out.println("\n=== 使用DirectX绘制形状 ===");
Circle circle2 = new Circle(3, 3, 8, directX);
Rectangle rect2 = new Rectangle(2, 2, 25, 18, directX);
circle2.draw();
rect2.draw();
System.out.println("\n=== 运行时更换绘图API ===");
circle1.changeDrawingAPI(directX);
circle1.draw();
rect1.changeDrawingAPI(directX);
rect1.draw();
System.out.println("\n=== 调整形状大小 ===");
circle1.resize(1.5);
circle1.draw();
rect1.resize(0.8);
rect1.draw();
System.out.println("\n观察:形状(抽象)和绘图API(实现)可以独立变化!");
}
}
|