Posts 设计模式-桥接模式
Post
Cancel

设计模式-桥接模式

概念解析

桥接模式,与策略模式类似,只是桥接模式侧重于软件结构,策略模式侧重于对象行为。其功能是:将抽象和实现解耦,使得可以独立地变化。 桥接模式类图如下:

img

使用场景主要是:

  • 产品可以进行划分为多个分类和组合,即多个独立变化的维度,每个维度都希望独立进行扩展
  • 对于由于继承/多重继承导致系统类数目急剧增加的系统,可以改用桥接模式来实现

实例分析

场景分析:几何分类的设计:形状有矩形、椭圆形等,颜色有红色、绿色等;如果采用一般继承,如图形->矩形->红色矩形,这样添加更多颜色/形状的时候,类图会变得很臃肿。采用桥接模式,代码如下:

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())
    """
    测试结果:
    红色矩形
    绿色矩形
    红色椭圆
    绿色椭圆
    """
This post is licensed under CC BY 4.0 by the author.

设计模式-模板模式

设计模式-解释模式