python设计模式之桥接模式
程序员文章站
2022-05-18 08:38:33
python设计模式之桥接模式
意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化
适用性
你不希望在抽象和它的实现部分之间有一个固定的绑定关系,比如可能在程序运行...
python设计模式之桥接模式
意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化适用性
你不希望在抽象和它的实现部分之间有一个固定的绑定关系,比如可能在程序运行时刻,实现部分应可以被选择或者切换 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充,这时Bridge 模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充例子
以画圆为例,如下
# -*- coding:utf-8 -*- __author__ = 'Ricky' class DrawingAPI1(object): """ 实现类1 """ def draw_circle(self, x, y, radius): print ('API1.cicle at {}:{} radius {}'.format(x, y, radius)) class DrawingAPI2(object): """ 实现类2 """ def draw_circle(self, x, y, radius): print ('API2.cicle at {}:{} radius {}'.format(x, y, radius)) class CicleShape(object): """ 抽象类 """ def __init__(self, x, y, radius, drawing_api): self._x = x self._y = y self._radius = radius self._drawing_api = drawing_api def draw(self): """ 对外提供公用接口 :return: """ self._drawing_api.draw_circle(self._x, self._y, self._radius) def scale(self, pct): """ 设置大小 :param pct: :return: """ self._radius *= pct if __name__ == '__main__': shapes = ( CicleShape(1, 2, 3, DrawingAPI1()), CicleShape(5, 7, 11, DrawingAPI2()), ) for shape in shapes: shape.scale(2.5) shape.draw() output: API1.cicle at 1:2 radius 7.5 API2.cicle at 5:7 radius 27.5