【程序设计】Python的桥梁模式

模式桥梁又叫桥接模式

定义如下:抽象艺术与实现解耦(注意此处的抽象和实现,并非抽象类和实现类的那种关系,而是一种角色的关系,这里需要好好区分一下),可以使其独立变化

所谓的,就是抽象化角色的抽象类和实现化角色的抽象类之间的引用关系

优点:
1,抽象角色与实现角色相分离,二者可以独立设计,不受约束;
2,扩展性强:抽象角色和实现角色可以非常灵活地扩展

应用场景:
1,不适用继承或者原继承关系中抽象类可能频繁变动的情况,可以将原类进行拆分,拆成实现角色和抽象化角色。例如本例中,若将形状,粗细,绘画样式等属于汇集在一个类中,一旦抽象类中有所变动,将造成巨大的风险;
2,重用性比较大的场景。比如开关控制逻辑的程序,开关就是抽象化角色,开关的形式有很多种,操作的实现化角色也有很多种,采用桥梁模式,(如当前例子)开关即可进行复用,整体会将设计的粒度减小。

缺点
1,增加对系统理解的难度。


流程图:



蟒蛇代码实现:

“””

桥梁模式

在一个画图程序中,
常会见到这样的情况:有一些预设的图形,如矩形,圆形等,
还有一个对象 - 画笔,调节画笔的类型(如画笔还是画刷,还是毛笔效果等)
并设定参数(如颜色,线宽等),
选定图形,就可以在画布上画出想要的图形了。
要实现以上需求,
先从最抽象的元素开始设计,即形状和画笔(暂时忽略画布,同时忽略画笔参数,只考虑画笔类型)。
“””

class形状:
    NAME = “”
    param=""
    def __init__(self,*param):
        pass
    def getName(self):
        return self.name
    def getParam(self):
        return self.name,self.param

class Pen:
    shape=""
    type=""
    def __init__(self,shape):
        self.shape=shape
    def draw(self):
        pass


# 构造多个形状
class Rectangle(Shape):
    def __init__(self, long, width, *param):
        super ().__init__ (*param)
        self.name="矩形"
        self.param="长:%s 宽:%s"%(long,width)
        print ("创建一个矩形:%s" % self.param)


class Circle(Shape):
    def __init__(self, radius, *param):
        super ().__init__ (*param)
        self.name="圆形"
        self.param="半径:%s"%radius
        print ("创建一个圆:%s" % self.param)

# 构造多种画笔
class NormalPen(Pen):
    def __init__(self,shape):
        Pen.__init__(self,shape)
        self.type="标准"
    def draw(self):
        print(“绘画%s:%s ----参数:%s”%(self.type,self.shape.getName(),self.shape.getParam()))


BrushPen(Pen)类:
    def __init __(self,shape):
        笔.__的init __(自我,形状)
        self.type = “刷子”
    def draw(self):
        print(“绘画%s:%s ----参数:%s”%(self.type,self.shape.getName(),self.shape.getParam()))


如果__name __ ==“__ main__”:
    normal_pen = NormalPen(矩形( “20厘米”, “10厘米”))
    brush_pen = BrushPen(圆( “15厘米”))
    normal_pen.draw()
    brush_pen.draw()




原文:https ://yq.aliyun.com/articles/71072 ? spm = a2c4e.11153940.blogcont280715.19.175692aawkXRdB

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值