python设计模式之桥接模式

来源:互联网 发布:mysql注入式攻击 编辑:程序博客网 时间:2024/05/21 23:45

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 *= pctif __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.5API2.cicle at 5:7 radius 27.5
原创粉丝点击