美文网首页
PHP中的设计模式

PHP中的设计模式

作者: kangyiii | 来源:发表于2017-03-13 22:30 被阅读0次

    设计模式

    可以理解为解决问题的"套路"

    工厂模式

    总是需要去实例化很多的类来得到对象,这时就可以设计出一个工厂(其实就是一个类),该工厂的左右就是为人们"生产"各种对象。这种工厂通常只要指定类名,就可以据此获取一个该类的对象。

    <?php
        class factory{
            //Instance实例
            static function getInstance($className){
                //安全操作,判断是否存在这个类文件,以此来保证能创建该类
                if(file_exists('./class/'.$className.".class.php")){
                    $obj1 = new $className();
                    return $obj1;
                }else{
                    return null;
                }
            }
        }
        $obj1 = factory::getInstance("A");//获取类A的一个对象
    ?>
    

    单例模式

    程序从启动到结束这个生命周期中只需要这一个对象,内存中只有这一份对象内存,多次创建时也只是这一个对象。

    步骤:

    1. 私有化一个静态变量,用于存储创建当前对象
    2. 私有化构造方法,禁止调用
    3. 创建静态方法,用于实例化对象,如果第一步已经有值就用 ,没有重新创建
    4. 私有化clone方法,禁止调用
    <?php
         //单例模式:思路是类内部会存储一个自己的对象,每次去取存储的那个对象
         class B{
            public $v1 = 10;
            //存储已经创建过的B对象
            private static $instance;
            private function __construct(){}
            public static function getNew(){
                if(!isset(B::$instance)){
                    B::$instance = new self;
                }
                return B::$instance;
            }
                    //禁止克隆,克隆会重新创建对象
            private function __clone(){}
         }
         $o1 =  B::getNew();
         $o1->v1 = 20;
         $o2 =  B::getNew();
         $o2->v1 = 40;
         var_dump($o1,$o2);
    //打印结果:object(B)#1 (1) { ["v1"]=> int(40) } object(B)#1 (1) { ["v1"]=> int(40) } 
    ?>
    

    相关文章

      网友评论

          本文标题:PHP中的设计模式

          本文链接:https://www.haomeiwen.com/subject/velngttx.html