zoukankan      html  css  js  c++  java
  • 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);
    ?>
  • 相关阅读:
    GZIPInputStream 流未关闭引起的内存泄漏问题
    Java ExcutorService优雅关闭方式
    redis pipline
    LeetCode 30与所有单词相关联的字串
    Scala不使用null 而使用Option,None,Some的好处
    记录: 一次解决整型溢出攻击(使用scala,隐式转换)
    Scala 封装可break和continue的foreach循环
    记录: 百度webuploader 分片文件上传java服务器端(spring mvc)示例的优化
    HBase shell 中的十六进制数值表示
    关于getSystemResource, getResource 的总结
  • 原文地址:https://www.cnblogs.com/xuan584521/p/6407201.html
Copyright © 2011-2022 走看看