欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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