欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

设计模式-桥模式

时间:2023-05-26
桥模式

当事物有两个维度,两个维度都有扩展
有些系统耦合度特别高,需要一定程度解耦合
举例耦合度高

#绘制图形 图形由颜色和形状组成class shape(object): pass#图形class circle(shape): passclass line(shape): passclass redcirle(object): passclass blackcricle(object): pass#.....#颜色和图形耦合在一起,假如要加一个图形,比如长方形,# 就要再写一堆各种颜色的长方形,这时候就要接耦合,使用桥模式

举例桥模式

#绘制图形 图形由颜色和形状组成from abc import ABCmeta,abstractmethodclass shape(object):#图形是抽象者 __metaclass__ = ABCmeta @abstractmethod #模拟画出一个图形 def draw(self): passclass color(object):#颜色是实现者 __metaclass__ = ABCmeta @abstractmethod #模拟上色 def paint(self, shape): pass#细化抽象class Circle(shape): name = "圆形" def __init__(self,color): #使用组合 self.color = color def draw(self): self.color.paint(self)#具体实现class Red(color): def paint(self, shape): print "红色的%s" % shape.name#clientc = Circle(Red())c.draw()

桥模式扩展就没那么麻烦了,缺啥加啥,client需要什么自己组合
当然也可以颜色是抽象,图形是实现者

from abc import ABCmeta,abstractmethod#抽象者class color(object): __metaclass__ = ABCmeta @abstractmethod def paint(self): pass#实现者class shape(object): __metaclass__ = ABCmeta @abstractmethod def draw(self, color): passclass red(color): name = "红色" def __init__(self, shape): self.shape = shape def paint(self): self.shape.draw(self)class circle(shape): def draw(self, color): print "%s的圆形" % color.name#clientr = red(circle())r.paint()

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。