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);
    ?>
  • 相关阅读:
    一个简单而经典的RTX51 Tiny应用实例
    基于HttpClient 4.3的可訪问自签名HTTPS网站的新版工具类
    动态绑定与动态分发-动态绑定暗含动态分发
    多态是面向接口编程的概念
    多态本质:多个对象共享同一接口 多态本质是共享接口
    Smalltalk
    Simula-Virtual function
    执行力
    目标、计划:下定决心 排除万难
    当断不断,必受其乱
  • 原文地址:https://www.cnblogs.com/xuan584521/p/6407201.html
Copyright © 2011-2022 走看看