设计模式之组合模式(PHP实现)


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 Composite\Employee;

$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;

 

posted @ 2018-06-05 18:18  周起  阅读(816)  评论(0编辑  收藏  举报