>  기사  >  php教程  >  星际争霸之php单件和单态模式

星际争霸之php单件和单态模式

WBOY
WBOY원래의
2016-06-07 17:23:051183검색

星际争霸允许玩家作弊,当然这是在人和电脑对战的时候。而且作弊有个特点,比如快速建造,能量无限是对所有的玩家(包括电脑)都生效,如果关闭了作弊,对所有的玩家的作用都同时消失。


这也就是说如果我们把作弊状态作为一个类,他只能有一个对象。


待解决的问题:确保某个类只能有一个对象。


思路:把对外新建对象的权利都收回,包括new,clone。为了防止通过子类来覆盖父类的方法和成员,将类设置为final。用static成员来保存唯一的对象



单件模式示例:

<?php //将类设置为final,禁止其他类继承它

final class cheat {

  //快速建造的生效状态,用private保护

  private $fastBuild = false;

  //用static成员来保存唯一的对象

  private static $instance;

  //设置快速建造的生效状态的方法,用public为了能够公开调用

  public function setStatus($input)

  {

        //如果输入的秘籍正确,operation cwal是快速建造的秘籍

        if($input === &#39;operation cwal&#39;)

        {

        //像开关一样,逆反状态

        $this->fastBuild = !$this->fastBuild ;

        }

  }

  //读取快速建造的生效状态的方法,用public为了能够公开调用

  public function getStatus()

  {

    return $this->fastBuild ;

  }

  //获取唯一对象的唯一方法

  public function getInstance()

  {

        //如果对象没有被新建,则新建它

        if(!isset(self::$instance))

        {

        self::$instance = new cheat() ;

        }

    return self::$instance ;

  }

  //用private来禁止在本类以外new对象

  private function 
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.