• 【编程思想】【设计模式】【结构模式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转载版
  • 相关阅读:
    Oracle VM VirtualBox 虚拟机中桥接模式一直不能用 ,需要安装 VBoxNetLwf.inf
    Windows7窗口跑到屏幕外面
    手动操作群晖蜂鸣器指示灯方法
    DHT11温湿度传感器接入HomeBridge
    DIY树莓派Homebridge智能台灯
    群晖NAS局域网无法跑满千兆排查
    虚拟机性能监控与故障处理工具------JDK的命令行工具
    垃圾收集器与内存分配策略-内存分配与回收策略
    Minor GC 与Full GC有什么不一样
    java的关键字与保留字
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035401.html
Copyright © 2020-2023  润新知