<?php
/*
* WEB开发笔记 www.chhua.com 每日练习 PHP 设计模式初级 PHP生成对象的方法
*/
/*
* 场景说明:老板,老板的方法——解雇员工,员工,员工作出反应
*/
abstract class Employee {//员工的抽象基类
protected $name;
function __construct($name){//构造方法
$this->name=$name;
}
abstract function fire();//抽象方法
}
class minion extends Employee{//员工的具体实现的子类
function fire(){//覆写父类的抽象方法
echo $this->name.”:我要起诉你!”;
}
}
/*class NastyBoss {//角色为老板的类
private $employees=array();//包含很多员工,数组内容为员工实例对象
function addEmployess($employeeName){//添加员工方法
$this->employees[]=new minion($employeeName);//每当添加就按照名字生成一个员工对象,放在员工数组里
}
function projectFails(){//老板的一个解雇方法
if (count($this->employees)>0){//解雇最后一个加入的
$emp=array_pop($this->employees);//得到最后一个加入的对象
$emp->fire();//调用最后一个加入的员工的方法
}
}
}
$boss=new NastyBoss();//实例化老板
$boss->addEmployess(“BOB”);//加入一个员工
$boss->addEmployess(“MARY”);//加入一个员工
$boss->addEmployess(“Harry”);//加入一个员工
$boss->projectFails();*///Harry:我要起诉你!
/*
*注:以上就是通过用PHP组合来实现多态的最简单的例子。
*注意观察对象的生成和关系,类和类之后组合完成一个工作,但类和类之间又是相互独立的。
*
*然而以上的方法会出现一个问题,例如:不同的员工可能会有不同的方法和属性,那么就必须声明其它的类改造如下:
*
*/
class goto extends Employee {
function fire(){
echo $this->name.”:我直接走人!”;
}
}
class NastyBoss {//角色为老板的类
private $employees=array();//包含很多员工,数组内容为员工实例对象
function addEmployess(Employee $employeeName){//添加员工方法,以对象当参数
$this->employees[]=$employeeName;//每当添加就按照名字生成一个员工对象,放在员工数组里
}
function projectFails(){//老板的一个解雇方法
if (count($this->employees)>0){//解雇最后一个加入的
$emp=array_pop($this->employees);//得到最后一个加入的对象
$emp->fire();//调用最后一个加入的员工的方法
}
}
}
$boss=new NastyBoss();//实例化老板
$boss->addEmployess(new minion(“BOB”));//加入一个员工
$boss->addEmployess(new goto(“MARY”));//加入一个员工
$boss->addEmployess(new minion(“Harry”));//加入一个员工
$boss->projectFails();//Harry:我要起诉你!
$boss->projectFails();//MARY:我直接走人!
?>