zoukankan      html  css  js  c++  java
  • 【编程思想】【设计模式】【结构模式Structural】组合模式composite

    Python版

    https://github.com/faif/python-patterns/blob/master/structural/composite.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
    *What is this pattern about?
    The composite pattern describes a group of objects that is treated the
    same way as a single instance of the same type of object. The intent of
    a composite is to "compose" objects into tree structures to represent
    part-whole hierarchies. Implementing the composite pattern lets clients
    treat individual objects and compositions uniformly.
    
    *What does this example do?
    The example implements a graphic class,which can be either an ellipse
    or a composition of several graphics. Every graphic can be printed.
    
    *Where is the pattern used practically?
    In graphics editors a shape can be basic or complex. An example of a
    simple shape is a line, where a complex shape is a rectangle which is
    made of four line objects. Since shapes have many operations in common
    such as rendering the shape to screen, and since shapes follow a
    part-whole hierarchy, composite pattern can be used to enable the
    program to deal with all shapes uniformly.
    
    *References:
    https://en.wikipedia.org/wiki/Composite_pattern
    https://infinitescript.com/2014/10/the-23-gang-of-three-design-patterns/
    
    *TL;DR80
    Describes a group of objects that is treated as a single instance.
    """
    
    
    class Graphic:
        def render(self):
            raise NotImplementedError("You should implement this.")
    
    
    class CompositeGraphic(Graphic):
        def __init__(self):
            self.graphics = []
    
        def render(self):
            for graphic in self.graphics:
                graphic.render()
    
        def add(self, graphic):
            self.graphics.append(graphic)
    
        def remove(self, graphic):
            self.graphics.remove(graphic)
    
    
    class Ellipse(Graphic):
        def __init__(self, name):
            self.name = name
    
        def render(self):
            print("Ellipse: {}".format(self.name))
    
    
    if __name__ == '__main__':
        ellipse1 = Ellipse("1")
        ellipse2 = Ellipse("2")
        ellipse3 = Ellipse("3")
        ellipse4 = Ellipse("4")
    
        graphic1 = CompositeGraphic()
        graphic2 = CompositeGraphic()
    
        graphic1.add(ellipse1)
        graphic1.add(ellipse2)
        graphic1.add(ellipse3)
        graphic2.add(ellipse4)
    
        graphic = CompositeGraphic()
    
        graphic.add(graphic1)
        graphic.add(graphic2)
    
        graphic.render()
    
    ### OUTPUT ###
    # Ellipse: 1
    # Ellipse: 2
    # Ellipse: 3
    # Ellipse: 4
    Python转载版
  • 相关阅读:
    初学Python3
    性能测试学习成长图
    k8s集群部署mysql(docker自创建镜像)
    docker 部署uwgsi+python 启动报错 Python 3 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
    jenkins 打安卓包 cpu使用过高处理操作
    docker部署mysql,nginx,php,并上传镜像到私有仓库
    Linux下PHP7.2扩展
    docker部署Eurake服务,服务节点无法注册服务
    本地Pycharm将spark程序发送到远端spark集群进行处理
    spark集群安装并集成到hadoop集群
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035401.html
Copyright © 2011-2022 走看看