単純なCompositionパターンサンプルを作成しようとしています。基本的に、出力は各部門の従業員の完全なインテリジェントになります。3種類の従業員と2つの部門を作成しました。次のコードを参照してください。
従業員クラス
abstract class Employee {
function addEmployee(Employee $employee){
}
function removeEmployee(){
}
abstract function showIntelligent();
}
ミニオンクラス
class Minion extends Employee {
function showIntelligent(){
return '100';
}
}
マネージャークラス
class Manager extends Employee {
function showIntelligent(){
return '150';
}
}
営業部クラス
class SalesDept extends Employee {
private $_deptEmployee=array();
function addEmployee(Employee $employee){
$this->_deptEmployee[]=$employee;
}
function removeEmployee(){
if(!empty($this->_deptEmployee)){
array_pop($this->_deptEmployee);
}else{
echo 'no employees in Sales Department';
}
}
function showIntelligent() {
$totalInt=0;
foreach ($this->_deptEmployee as $employee){
$totalInt += $employee->showIntelligent();
}
echo 'Total Intelligent of the Sales Department Employees is: '.$totalInt;
}
}
デザイン学科クラス
class DesignDept extends Employee {
private $_deptEmployee=array();
function addEmployee(Employee $employee){
$this->_deptEmployee[]=$employee;
}
function removeEmployee(){
if(!empty($this->_deptEmployee)){
array_pop($this->_deptEmployee);
}else{
echo 'no employees in Design Department';
}
}
function showIntelligent() {
$totalInt=0;
foreach ($this->_deptEmployee as $employee){
$totalInt += $employee->showIntelligent();
}
echo 'Total Intelligent of the Design Department Employees is: '.$totalInt;
}
}
私のインデックス
$salesDpt=new SalesDept();
$salesDpt->addEmployee(new Manager());
$salesDpt->addEmployee(new Minion());
$salesDpt->addEmployee(new Minion());
$salesDpt->addEmployee(new GeneralManager());
$salesDpt->showIntelligent();
$DesignDpt=new DesignDept();
$DesignDpt->addEmployee(new Manager());
$DesignDpt->addEmployee(new Manager());
$DesignDpt->addEmployee(new Minion());
$DesignDpt->addEmployee(new Minion());
$DesignDpt->addEmployee(new Minion());
$DesignDpt->addEmployee(new Minion());
$DesignDpt->addEmployee(new Minion());
$DesignDpt->addEmployee(new Minion());
$DesignDpt->addEmployee(new Minion());
$DesignDpt->addEmployee(new GeneralManager());
$DesignDpt->showIntelligent();
新しい従業員を追加するには、多くのコードを使用する必要があるようです。これは良い習慣ですか?とにかくそれを改善するには?アドバイスをありがとう。