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();

      

  • 相关阅读:
    每日一题:用一个SQL语句交换两条数据某一列的值
    String value(); String[] value(); 比较
    java.sql.SQLException: Unknown system variable 'tx_isolation'
    return; 用法
    Linux和UNIX的关系及区别(详解版)
    404
    Centos 7 修改YUM镜像源地址为阿里云镜像地址
    JVM面试必备
    秒杀优化迭代
    电商秒杀基础构建项目笔记2(优化效验准则和商品模型创建)
  • 原文地址:https://www.cnblogs.com/mengshenshenchu/p/6751574.html
Copyright © 2011-2022 走看看