10.10

实验10:组合模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解组合模式的动机,掌握该模式的结构;

2、能够利用组合模式解决实际问题

 

[实验任务一]:组合模式

用透明组合模式实现教材中的“文件夹浏览”这个例子。

实验要求:

1. 

2.提交源代码;

class Component:
    def __init__(self, name):
        self.name = name

    def add_component(self, component):
        pass

    def remove_component(self, component):
        pass

    def get_child(self, depth):
        pass


class Leaf(Component):
    def __init__(self, name):
        super().__init__(name)

    def add_component(self, component):
        print("can't add")

    def remove_component(self, component):
        print("can't remove")

    def get_child(self, depth):
        print('-' * depth + self.name)


class Composite(Component):
    def __init__(self, name):
        super().__init__(name)
        self._components = []

    def add_component(self, component):
        self._components.append(component)

    def remove_component(self, component):
        self._components.remove(component)

    def get_child(self, depth):
        print('-' * depth + self.name)
        for component in self._components:
            component.get_child(depth + 2)


        # 主程序
if __name__ == "__main__":
    root = Composite("root")
    leaf1 = Leaf("A")
    leaf2 = Leaf("B")
    root.add_component(leaf1)
    root.add_component(leaf2)

    lay2 = Composite("AA")
    leaf4 = Leaf("BB")
    lay2.add_component(leaf4)

    lay1 = Composite("CC")
    leaf3 = Leaf("C")
    lay1.add_component(leaf3)
    lay1.add_component(lay2)

    root.add_component(lay1)

    root.get_child(1)
    print()
    lay1.get_child(1)
    print()
    lay2.get_child(1)

    # 垃圾回收在Python中由GC自动处理,因此不需要手动释放内存

 

3.注意编程规范。

 

 

posted @ 2024-11-27 08:18  The-rich  阅读(24)  评论(0)    收藏  举报