PHP中的设计模式

2017-03-13  本文已影响0人  kangyiii

设计模式

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

工厂模式

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

<?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) } 
?>
上一篇下一篇

猜你喜欢

热点阅读