设计模式(Python语言)----组合模式(设计模式Python)

网友投稿 301 2022-08-23


设计模式(Python语言)----组合模式(设计模式Python)

更多信息请参考 【设计模式】

组合模式的内容

将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性

组合模式中的角色

抽象组件(Component)叶子组件(Leaf)复合组件(Composite)客户端(Client)

组合模式适应场景

表示对象的部分-整体层次结构(特别是结构式递归的)希望用户忽略组合对象与单个对象的不同,用户统一地使用组合结构中的所有对象

组合模式的优点

定义了包含基本对象和组合对象的类层次结构简化客户端代码,即客户端可以一致地使用组合对象和单个对象更容易增加新类型的组件

组合模式实例

代码如下:

from abc import ABCMeta,abstractmethodclass Graphic(metaclass=ABCMeta): @abstractmethod def draw(self): passclass Point(Graphic): def __init__(self,x,y): self.x=x self.y=y def __str__(self): return f"点({self.x},{self.y})" def draw(self): print(str(self))class Line(Graphic): def __init__(self,p1,p2): self.p1=p1 self.p2=p2 def __str__(self): return f"线段({self.p1},{self.p2})" def draw(self): print(str(self))class Picture(Graphic): def __init__(self,iterable): self.children=[] for elem in iterable: self.add(elem) def add(self,graphic): self.children.append(graphic) def draw(self): for elem in self.children: elem.draw()if __name__=="__main__": p1=Point(2,3) l1=Line(Point(3,4),Point(6,7)) l2=Line(Point(1,5),Point(2,8)) pic1=Picture([p1,l2,l2]) p2=Point(4,4) l3=Line(Point(1,1),Point(0,0)) pic2=Picture([p2,l3]) pic=Picture([pic1,pic2]) pic.draw()

执行结果如下:

点(2,3)线段(点(1,5),点(2,8))线段(点(1,5),点(2,8))点(4,4)线段(点(1,1),点(0,0))


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案)
下一篇:设计模式(Python语言)----代理模式(python的语言编程模式)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~