php基础设计模式

1.工厂模式
常规创建对象的方法,直接new该类
$db = new Com\Database();
缺点当方法名或者参数变化时间,需多处修改
工厂模式,在工厂类方法创建db类,统一调用工厂方法
class Factory {
    static function createDatabase(){
        $db = new Database();
        return $db ;
    }
}
$db = Com\Factory:: createDatabase ();
2.单例模式
例如数据库类,经常需要创建数据库连接,多次创建数据库链接会造成资源浪费
使用单例模式,多次调用,也只会有一次数据库链接
例子:
在db类中把构造方法设置为私有,防止类外调用,通过 getInstance单例方法创建对象,
这样如果调用多少次 getInstance方法都只会创建一次对象.
class Database{
    protected static $db ;
    //私有化构造方法,禁止在类外实例化;
    private function __construct()
    {

    }
    static function getInstance(){
        if ( self :: $db ){
           return new self ();
        } else {
            self :: $db = new  self ();
            return self :: $db ;
        }
    }
}
$db = Com\Database:: getInstance ();
$db = Com\Database:: getInstance ();
$db = Com\Database:: getInstance ();
3.注册树模式
//调用一次实例之后,注册到注册树,
之后不需要再调用实例,直接从注册器获取。
class Register{
    protected static $objects ;
    static function set( $alias , $object ){
        self :: $objects [ $alias ] = $object ;
    }
    static function get( $name ){
        return self :: $objects [ $name ];
    }
    static function _unset( $alias ){
        unset ( self :: $objects [ $alias ]);
    }
}
class Factory{
    static function createDatabase(){
        $db = Database:: getInstance ();
        //调用一次实例之后注册到注册树
        Register:: set ( "db1" , $db );
        return $db ;
    }
}
只需注册一次,之后直接在注册器获取
$db = \Com\Register:: get ( 'db1' );

猜你喜欢

转载自blog.csdn.net/sinat_14826983/article/details/80850255