name=$name;    }    abstract public function add(Company $c);    abstract public function remove(Company $c);    abstract public function display($depth);    abstract public function lineofduty();}//具体公司类class ConcreteCompany extends Company{    private $children=array();    public function __construct($name){        parent::__construct($name);    }    public function add(Company $c){        if(! in_array($c, $this->children)){            $this->children[]=$c;        }    }    public function remove(Company $c){        if(in_array($c, $this->children)){            $pos=array_search($c,$this->children);            unset($this->children[$pos]);        }    }    public function display($depth){        $str='__';        for($i=0;$i<$depth;$i++){            $str.=$str;        }        echo $str.$this->name.'
';        foreach ($this->children as $c) {            $c->display($depth+1);        }    }    public function lineofduty(){        foreach ($this->children as $c) {            $c->lineofduty();        }    }}//人力资源部class HRDepartment extends Company{    public function __construct($name){        parent::__construct($name);    }    public function add(Company $c){}    public function remove(Company $c){}    public function display($depth){        $str='__';        for($i=0;$i<$depth;$i++){            $str.=$str;        }        echo $str.$this->name.'
';    }    public function lineofduty(){        echo $this->name.':
职责---员工的招聘培训管理'.'
';    }}//财务部class FinaceDepartment extends Company{    public function __construct($name){        parent::__construct($name);    }    public function add(Company $c){}    public function remove(Company $c){}    public function display($depth){        $str='__';        for($i=0;$i<$depth;$i++){            $str.=$str;        }        echo $str.$this->name.'
';    }    public function lineofduty(){        echo $this->name.':
职责---公司财务收支管理'.'
';    }}// 客户端$root=new ConcreteCompany('北京总公司');$root->add(new HRDepartment('总公司人力资源部'));$root->add(new FinaceDepartment('总公司财务部'));$comp1=new ConcreteCompany('上海华东分公司');$comp1->add(new HRDepartment('华东分公司人力资源部'));$comp1->add(new FinaceDepartment('华东分公司财务部'));$root->add($comp1);$comp2=new ConcreteCompany('南京办事处');$comp2->add(new HRDepartment('南京办事处人力资源部'));$comp2->add(new FinaceDepartment('南京办事处财务部'));$comp1->add($comp2);$comp3=new ConcreteCompany('杭州办事处');$comp3->add(new HRDepartment('杭州办事处人力资源部'));$comp3->add(new FinaceDepartment('杭州办事处财务部'));$comp1->add($comp3);$root->display(1);$root->lineofduty();