github地址:https://github.com/ZQCard/design_pattern
/**
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
* 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。 * 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 * 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 * 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。 */
(1)Employee.class.php
<?php namespace Composite; class Employee { private $name; private $dept; private $salary; private $subordinates = []; public function __construct($name, $dept, $salary) { $this->name = $name; $this->dept = $dept; $this->salary = $salary; } public function add(Employee $employee) { $this->subordinates[] = $employee; } public function remove(Employee $employee) { } public function getSubordinates() { return $this->subordinates; } }
(2)composite.php
<?php spl_autoload_register(function ($className){ $className = str_replace('\','/',$className); include $className.".class.php"; }); use CompositeEmployee; $CEO = new Employee("John","CEO", 30000); $headSales = new Employee("Robert","Head Sales", 20000); $headMarketing = new Employee("Michel","Head Marketing", 20000); $clerk1 = new Employee("Laura","Marketing", 10000); $clerk2 = new Employee("Bob","Marketing", 10000); $salesExecutive1 = new Employee("Richard","Sales", 10000); $salesExecutive2 = new Employee("Rob","Sales", 10000); $CEO->add($headSales); $CEO->add($headMarketing); $headSales->add($salesExecutive1); $headSales->add($salesExecutive2); $headMarketing->add($clerk1); $headMarketing->add($clerk2); $subordinates = $CEO->getSubordinates(); echo '<pre/>'; var_dump($subordinates);die;