zoukankan      html  css  js  c++  java
  • php单例模式和工厂模式

    一、单例模式

    一个类只能实例化一个对象

    class Ren
    {
    private static $dx; //用来存储生成的对象,静态方法调用静态成员
    public $name;

    //私有的构造函数
    private function __construct()
    {

    }
    //生成对象的方法
    public static function DuiXiang()
    {
    if(empty(self::$dx))//判断是否为空,如果空,则new一个新的对象
    {
    self::$dx = new Ren();
    }

    return self::$dx;
    }
    }

    $r = Ren::DuiXiang();
    $r->name = "张三";

    $r1 = Ren::DuiXiang();

    var_dump($r1);

    二、工厂模式

    第一种方式: 安全性不高

    class suan

    {

           public $a;

           public $b;

          

           function jia()

           {

                  return $this->a+$this->b;

           }

           function jian()

           {

                  return $this->a-$this->b;

           }

    }

    $s=new suan();

    $s->a=10;

    $s->b=5;

    echo $s->jia();

      第二种方式:可拓展性强

    class YunSuan

    {

           public $a;

           public $b;

          

           function Suan()

           {

           }

    }

    class Jia extends YunSuan

    {

           function Suan()

           {

                  return $this->a+$this->b;

           }

    }

    class Jian extends YunSuan

    {

           function Suan()

           {

                  return $this->a-$this->b;

           }

    }

    $s = new Jia();

    $s->a=10;

    $s->b=5;

    echo $s->Suan();

      第三种方式:工厂模式  

    目的:解决第二种方式的缺点:当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的对象

    class YunSuan

    {

           public $a;

           public $b;

          

           function Suan()

           {

           }

    }

    class Jia extends YunSuan

    {

           function Suan()

           {

                  return $this->a+$this->b;

           }

    }

    class Jian extends YunSuan

    {

           function Suan()

           {

                  return $this->a-$this->b;

           }

    }            //到此为止与第二种方式一样 ;目的是解决当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的类

    class GongChang

    {

           static function ShengChan($f)

           {

                  switch($f)

                  {

                         case "+":

                                return new Jia();

                                break;

                         case "-":

                                return new Jian();

                                break;

                  }

           }

    }

    $r = GongChang::ShengChan("-");

    $r->a=10;

    $r->b=5;

    echo $r->Suan();

      

  • 相关阅读:
    servlet&jsp高级:第四部分
    servlet&jsp高级:第三部分
    servlet&jsp高级:第二部分
    servlet&jsp高级:第一部分
    Servlet&jsp基础:第四部分
    Servlet&jsp基础:第三部分
    Servlet&jsp基础:第二部分
    Servlet&jsp基础:第一部分
    关于各地区并发高的解决思路
    Intellij IDEA使用restclient测试
  • 原文地址:https://www.cnblogs.com/mengshenshenchu/p/6751574.html
Copyright © 2011-2022 走看看