设计模式之——单例模式

本文通过一个关于船的小例子介绍了单例模式的应用。代码展示了如何确保类只有一个实例,并提供全局访问点。同时实现了乘客装载及查看功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 昨天我写过一个数据库的工厂模式,没看过的可以看一下 http://blog.youkuaiyun.com/emtit2008/archive/2008/12/16/3529492.aspx

其实在工厂模式就已经应用了单例模式,从始到终它就只有一个工厂,单例模式不需要新建实例。现在写一个简单的例子。

 

小船类boat.php

  1. <?php
  2. class boat {
  3.     
  4.     private static $instance=null;
  5.     private $skipper;
  6.     private $personNum=0;
  7.     private $passengers=array();
  8.     
  9.     private  function  __construct() {
  10.     }
  11.     
  12.     public static function getInstance(){
  13.         if (self::$instance==null){
  14.             self::$instance=new boat();
  15.         }
  16.         return self::$instance;
  17.     }
  18.     /**
  19.      * 设置船长
  20.      *
  21.      * @param unknown_type $name
  22.      */
  23.     public function setSkipper($name){
  24.         $this->skipper=$name;
  25.     }
  26.     /**
  27.      * 装人
  28.      *
  29.      * @param unknown_type $person
  30.      */
  31.     public function load($person){
  32.         if (!emptyempty($personand $this->personNum<=5){
  33.             array_push($this->passengers,$person);
  34.             $this->personNum=$this->personNum+1;
  35.         }
  36.         if ($this->personNum>5) {
  37.             echo 'this boat only load 5 person!';
  38.         }
  39.         
  40.     }
  41.     /**
  42.      * 船上装了什么人
  43.      *
  44.      * @return unknown
  45.      */
  46.     public function whoInBoat(){
  47.         return $this->passengers;
  48.     }
  49. }
  50. ?>

现在看看怎么样上客

  1. <?php
  2. include 'boat.php';
  3. echo "从前有一条河,河里只有一条船,<br>";
  4. $boat1=boat::getInstance();//因为只有一条船,所以只有一个实例
  5. echo "现在张三要到河东去,";
  6. $boat1->load('张三');
  7. echo "<br>现在船上坐着:<br>";
  8. foreach ($boat1->whoInboat() as $who){
  9.     echo $who.'<br>';
  10. }
  11. echo "<br>现在李四也要过河东去<br>";
  12. $boat1->load('李四');
  13. echo "现在船上坐着:<br>";
  14. foreach ($boat1->whoInboat() as $who){
  15.     echo $who.'、';
  16. }
  17. echo "<br><br>王五以为这条河有另一条船,<br>";
  18. $boat2=boat::getInstance();
  19. echo "他现在上船<br>";
  20. $boat2->load('王五');
  21. echo "现在船上坐着:<br>";
  22. foreach ($boat1->whoInboat() as $who){
  23.     echo $who.'、';
  24. }
  25. ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值