• php单例模式与工厂模式


    单例模式:
    单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。

    所有的单例模式至少拥有以下三种公共元素:
    1. 它们必须拥有一个构造函数,并且必须被标记为private
    2. 它们拥有一个保存类的实例的静态成员变量
    3. 它们拥有一个访问这个实例的公共的静态方法

    代码:

    <?php
    class ren
    {
        public $name;
        private static $dx;//存储对象
    //声明一个私有的实例变量
        private function __construct()//声明私有构造方法为了防止外部代码使用new来创建对象。
        {}
        public static function duixiang()
        {
            if(empty(self::$dx))//self关键字调用静态类;静态方法不需要实例化直接调用类->方法
            {//声明一个dx()静态方法,用于检测是否有实例对象
                self::$dx =  new ren();
            }
            return self::$dx;
        }
    }
    //$shili=new ren();//报错
    //$shishi=new ren();
    //两者不同
    $r= ren::duixiang();
    
    $r->name = "xxx";
    var_dump($r);
    $r1 = ren::duixiang();
    var_dump($r1);
    
    ?>

    工厂模式:

    工厂模式就是一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。

    看代码:

    这是一个普通的类,里面有一些方法

    <?php
    class yun
    {
        public $a;
        public $b;
        function suan()
        {
            echo "运算";
        }
    }
    class jia extends yun//继承yun
    {
        function suan()//重写
        {
            return $this->a+$this->b;
        }
    }
    class jian extends yun
    {
        function suan()
        {
            return $this->a-$this->b;
        }
    }
    class cheng extends yun
    {
        function suan()
        {
            return $this->a*$this->b;
        }
    }
    ?>

    然后写一个工厂类

    <?php
    class gongchang
    {
        static function chanpin($name)
            //给一个参数,返回一个对象
        {
            switch ($name){
                case"+":
    //表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码
                    return new jia();
                    break;
                case"-":
                    return new jian();
                    break;
                case"*":
                    return new jia();
                    break;
    
            }
        }
    }
    $aa = gongchang::chanpin("+");
    //此处找到与+相匹配的方法
    //给一个“*”的参数,给我返回一个类
    var_dump($aa);
    ?>
  • 相关阅读:
    大整数模拟
    MSSQL存储过程中获取记录集并循环操作一例
    about协议的妙用
    C#基础概念二十五问
    很完美的JS判断日期函数
    asp.net C# FileUpload 控件如何判断文件名的后缀
    c++中指针学习的两个绝好例子
    ASP.net性能优化总结
    C++指针
    JS中的undefined,null,"",0和false
  • 原文地址:https://www.cnblogs.com/xuan584521/p/6407201.html
Copyright © 2020-2023  润新知