组合模式

定义

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

动机

组合对象和单一对象拥有一致性,然客户端可以一起处理。

适用性

  • 想表示对象的部分 -整体层次结构。
  • 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-


class Menu(object):
    def __init__(self):
        self.items = []

    def add(self, menu):
        self.items.append(menu)

    def printer(self):
        for item in self.items:
            item.printer()


class MenuItem(object):
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def add(self):
        raise AttributeError('MenuItem is not supported add methid')

    def printer(self):
        print(self.name, self.price)


if __name__ == '__main__':
    menu = Menu()

    launch_item1 = MenuItem('meet', 15)
    launch_item2 = MenuItem('rice', 7)
    launch_item3 = MenuItem('noddles', 10)
    menu.add(launch_item1)
    menu.add(launch_item2)
    menu.add(launch_item3)

    drink_menu = Menu()

    drink_item1 = MenuItem('milk', 5)
    drink_item2 = MenuItem('tea', 4)
    drink_item3 = MenuItem('coffee', 6)
    drink_menu.add(drink_item1)
    drink_menu.add(drink_item2)
    drink_menu.add(drink_item3)

    menu.add(drink_menu)

    menu.printer()