ООП для чайников. Паттерны проектирования. Компоновщик (composite)
Следующий паттерн, - компоновщик (composite), тоже из группы структурирующих.
Компоновщик организует объекты в древовидные структуры для представления иерархии часть-целое. Всевозможные иерархии деревьев страниц в каталогах, файлов в папках являются яркими представителями паттерна Компоновщик.
Диаграмма для Компоновщика, выглядит так:
Реализовывая Компоновщик, нужно помнить о том чтобы интерфейс Component был максимально дополнен используемыми публичными методами, избавляя клиента от приведения к типу или проверки существования метода (в случае скриптовых языков). Также? стоит сразу позаботиться о максимально удобном функционале для управления элементами (помимо стандартных Add, Remove, GetChildIn).
Пример реализации на Python:
class TreeItem: def __init__(self, name): self.items = [] self.name = name self.current = 0 def __iter__(self): return self def add(self, item): self.items.append(item) return item def remove(self, name): self.items = [i for i in self.items if i.name != name] def __len__(self): return len(self.items) def get(self, i): return self.items[i] def next(self): self.current += 1 if len(self.items) >= self.current: return self.items[self.current-1] else: raise StopIteration if __name__ == '__main__': root = TreeItem('/') root.add(TreeItem("folder1")) print root.get(0).name root.remove("folder1") root.add(TreeItem("folder2")).add(TreeItem("folder21")) root.add(TreeItem("folder3")).add(TreeItem("folder31").add(TreeItem("folder311"))) def walk(item, level): for i in range(level): print(" "), print(item.name) for i in item: walk(i, level + 1) walk(root, 0) ----------------------------- folder1 / folder2 folder21 folder3 folder311
О статье
Вы сейчас читаете статью «ООП для чайников. Паттерны проектирования. Компоновщик (composite)»
- Написанную:
- 28.03.2010
- Категории:
- oop, programming
- Теги:
- компоновщик, паттерн

Нет комментариев
Перейти к форме добавления комментария | comments rss[?] | trackback uri [?]