継承の代わりに依頼する
10420 ワード
参考『再構築』
(1)元の例:
(2)継承関係を依頼に変更
この方法では、表示する必要がある2つのオブジェクトをインスタンス化し、そのうちの1つのオブジェクトをパラメータとして別のオブジェクトに渡すことが不適切です.(3)再構築継続
ここでWorkerをStudentのフィールドに設定し、Studentで委任関数を設定します.このようにすると,表示されないワークオブジェクトをパラメータとしてStudentの委任関数に伝達するのに有利である.
(1)元の例:
<?php
class Worker
{
public function inhome()
{ echo "inhome!!!".'<br>'; }
public function eat()
{ echo "eat!!!".'<br>'; }
public function working()
{ echo "working!!!".'<br>'; }
public function salary()
{ echo "get salary!!!".'<br>'; }
}
class Student extends Worker
{
public function gotoSchool()
{ echo "gotoSchool!!!".'<br>'; }
public function learnKnowledge()
{ echo "learnKnowledge!!!".'<br>'; }
}
$jack = new Student();
$jack->eat(); // Student Worker 2 , eat() $jack->inhome(); // Student Worker 2 , inhome() $jack->gotoSchool();
$jack->learnKnowledge();
?>
(2)継承関係を依頼に変更
<?php
class Worker
{
public function inhome()
{ echo "inhome!!!".'<br>'; }
public function eat()
{ echo "eat!!!".'<br>'; }
public function working()
{ echo "working!!!".'<br>'; }
public function getoffWork()
{ echo "getoffWork!!!".'<br>'; }
public function salary()
{ echo "get salary!!!".'<br>'; }
}
class Student
{
public function inhome($worker) // Student inhome()
{ $worker->inhome(); }
public function eat($worker) // Student eat()
{ $worker->eat(); }
public function gotoSchool()
{ echo "gotoSchool!!!".'<br>'; }
public function learnKnowledge()
{ echo "learnKnowledge!!!".'<br>'; }
}
$work = new Worker();
$jack = new Student();
$jack->eat($work);
$jack->inhome($work);
$jack->gotoSchool();
$jack->learnKnowledge();
?>
この方法では、表示する必要がある2つのオブジェクトをインスタンス化し、そのうちの1つのオブジェクトをパラメータとして別のオブジェクトに渡すことが不適切です.(3)再構築継続
<?php
class Worker
{
public function inhome()
{ echo "inhome!!!".'<br>'; }
public function eat()
{ echo "eat!!!".'<br>'; }
public function working()
{ echo "working!!!".'<br>'; }
public function getoffWork()
{ echo "getoffWork!!!".'<br>'; }
public function salary()
{ echo "get salary!!!".'<br>'; }
}
class Student
{
private $worker;
public function __construct()
{ $this->worker = new Worker(); }
public function inhome() // Student inhome()
{ $this->worker->inhome(); }
public function eat() // Student eat()
{ $this->worker->eat(); }
public function gotoSchool()
{ echo "gotoSchool!!!".'<br>'; }
public function learnKnowledge()
{ echo "learnKnowledge!!!".'<br>'; }
}
$jack = new Student();
$jack->eat($work);
$jack->inhome($work);
$jack->gotoSchool();
$jack->learnKnowledge();
?>
ここでWorkerをStudentのフィールドに設定し、Studentで委任関数を設定します.このようにすると,表示されないワークオブジェクトをパラメータとしてStudentの委任関数に伝達するのに有利である.