<?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:我直接走人!

?>

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

本文链接地址: PHP生成对象的方法模式 http://www.chhua.com/web-note767

相关笔记

更多