昨天我写过一个数据库的工厂模式,没看过的可以看一下
http://blog.youkuaiyun.com/emtit2008/archive/2008/12/16/3529492.aspx
其实在工厂模式就已经应用了单例模式,从始到终它就只有一个工厂,单例模式不需要新建实例。现在写一个简单的例子。
小船类boat.php
- <?php
- class boat {
- private static $instance=null;
- private $skipper;
- private $personNum=0;
- private $passengers=array();
- private function __construct() {
- }
- public static function getInstance(){
- if (self::$instance==null){
- self::$instance=new boat();
- }
- return self::$instance;
- }
- /**
- * 设置船长
- *
- * @param unknown_type $name
- */
- public function setSkipper($name){
- $this->skipper=$name;
- }
- /**
- * 装人
- *
- * @param unknown_type $person
- */
- public function load($person){
- if (!emptyempty($person) and $this->personNum<=5){
- array_push($this->passengers,$person);
- $this->personNum=$this->personNum+1;
- }
- if ($this->personNum>5) {
- echo 'this boat only load 5 person!';
- }
- }
- /**
- * 船上装了什么人
- *
- * @return unknown
- */
- public function whoInBoat(){
- return $this->passengers;
- }
- }
- ?>
现在看看怎么样上客
- <?php
- include 'boat.php';
- echo "从前有一条河,河里只有一条船,<br>";
- $boat1=boat::getInstance();//因为只有一条船,所以只有一个实例
- echo "现在张三要到河东去,";
- $boat1->load('张三');
- echo "<br>现在船上坐着:<br>";
- foreach ($boat1->whoInboat() as $who){
- echo $who.'<br>';
- }
- echo "<br>现在李四也要过河东去<br>";
- $boat1->load('李四');
- echo "现在船上坐着:<br>";
- foreach ($boat1->whoInboat() as $who){
- echo $who.'、';
- }
- echo "<br><br>王五以为这条河有另一条船,<br>";
- $boat2=boat::getInstance();
- echo "他现在上船<br>";
- $boat2->load('王五');
- echo "现在船上坐着:<br>";
- foreach ($boat1->whoInboat() as $who){
- echo $who.'、';
- }
- ?>