概念解析
桥接模式,与策略模式类似,只是桥接模式侧重于软件结构,策略模式侧重于对象行为。其功能是:将抽象和实现解耦,使得可以独立地变化。 桥接模式类图如下:
使用场景主要是:
- 产品可以进行划分为多个分类和组合,即多个独立变化的维度,每个维度都希望独立进行扩展
- 对于由于继承/多重继承导致系统类数目急剧增加的系统,可以改用桥接模式来实现
实例分析
场景分析:几何分类的设计:形状有矩形、椭圆形等,颜色有红色、绿色等;如果采用一般继承,如图形->矩形->红色矩形,这样添加更多颜色/形状的时候,类图会变得很臃肿。采用桥接模式,代码如下:
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
from abc import ABCMeta, abstractmethod
class Shape(metaclass=ABCMeta):
"""形状"""
def __init__(self, color):
self._color = color
@abstractmethod
def get_shape_type(self):
pass
def get_shape_info(self):
return self._color.get_color() + "的" + self.get_shape_type()
class Rectange(Shape):
"""矩形"""
def __init__(self, color):
super().__init__(color)
def get_shape_type(self):
return "矩形"
class Ellipse(Shape):
"""椭圆"""
def __init__(self, color):
super().__init__(color)
def get_shape_type(self):
return "椭圆"
def Color(metaclass=ABCMeta):
"""颜色"""
@abstractmethod
def get_color(self):
pass
def Red(Color):
"""红色"""
@abstractmethod
def get_color(self):
return "红色"
def Green(Color):
"""绿色"""
@abstractmethod
def get_color(self):
return "绿色"
def test_shape():
red_rect = Rectange(Red())
print(red_rect.get_shape_info())
green_rect = Rectange(Green())
print(green_rect.get_shape_info())
red_ellipse = Ellipse(Red())
print(red_ellipse.get_shape_info())
green_ellipse = Ellipse(Green())
print(green_ellipse.get_shape_info())
"""
测试结果:
红色矩形
绿色矩形
红色椭圆
绿色椭圆
"""