最新公告
  • 欢迎您光临002y资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • PHP单例模式与工厂模式详解

    正文概述    2022-06-23   13

    一、单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
    所有的单例模式至少拥有以下三种公共元素:

    1. 它们必须拥有一个构造函数,并且必须被标记为private
    2. 它们拥有一个保存类的实例的静态成员变量
    3. 它们拥有一个访问这个实例的公共的静态方法

    单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

    单例模式实例

    <?php
    class Single {
      private $name;//声明一个私有的实例变量
      private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
      
      }
     
      static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
      static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
       if(!self::$instance) self::$instance = new self();
       return self::$instance;
      }
     
      public function setname($n){ //给变量$name赋值
          $this->name = $n; 
       }
      public function getname(){ //取变量$name的值
          return $this->name; 
       }
     }
     
     
     $a = Single::getinstance();
     $b = Single::getinstance();
     $a->setname('hello world');
     $b->setname('good morning');
     echo $a->getname();//good morning
     echo $b->getname();//good morning
    ?>
    

    二、工厂模式就是一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。

    这样如果想更改创建的对象类型,只需更改该工厂即可。

    <?php
    //工厂类(关于运算符的操作)
    class factory{
     public static function dx($ope){
      switch($ope){
       case "+":
        return new plus();
        break;
       case "-":
        return new sub();
        break;
       case "%":
        return new rem();
        break;
      }
     }
    } 
    $ope = factory::dx("+");
    $ope->a = 20;
    $ope->b = 10;
    echo $ope->opera();
    

    工厂模式实例

    class Factory {//创建一个基本的工厂类
      static public function fac($id){//创建一个返回对象实例的静态方法
       if(1 == $id) return new A();
       elseif(2==$id) return new B();
       elseif(3==$id) return new C();
       return new D();
      }
     }
     
     interface FetchName {//创建一个接口
      public function getname();//
     }
     
     class A implements FetchName{
      private $name = "AAAAA";
      public function getname(){ 
          return $this->name; 
        }
     }
     
     class C implements FetchName{
      private $name = "CCCCC";
      public function getname(){
          return $this->name; 
        }
     }
     class B implements FetchName{
      private $name = "BBBBB";
      public function getname(){ 
          return $this->name;
        }
     }
     
     class D implements FetchName{
      private $name = "DDDDD";
      public function getname(){ 
          return $this->name; 
        }
    }
     
     
     $o = Factory::fac(6);//调用工厂类中的方法
     if($o instanceof FetchName){
     echo $o->getname();//DDDDD
     }
     
     $p=Factory::fac(3);
     echo $p->getname();//CCCCC
    ?>

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


    002y资源网 » PHP单例模式与工厂模式详解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    微信支付
    余额支付
    ×
    微信扫码支付 0 元