博客列表 >PHP的设计模式

PHP的设计模式

Whitney的博客
Whitney的博客原创
2020年03月13日 13:49:541360浏览

PHP的五大设计模式

单例模式

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例

单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。

单例模式分3中:懒汉式单例,饿汉式单例,登记式单例

单例模式有以下3个特点:

  1. 只能有一个实例

  2. 必须自行创建这个实例

  3. 必须给其他对象提供这个实例

PHP使用单例模式的主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。每一个的new操作都会消耗系统和内存的资源。

<?php 

class Single{
    
    //声明一个私有的实例变量
    private $name;
    
    //声明一个私有构造方法,为了防止外部代码使用new来创建对象
    private function __construct(){

    }
   
    //声明一个静态变量(保存在类中唯一的一个实例)
    static public $instance;

    //声明一个静态方法,用于检测是否有实例对象
    static public function getinstance(){
         if(!self::$instance)self::$instance = new self();
         return self::$instance;
    }

    public function setname($n){
         $this->name = $n;
    }

    public function getname(){
         return $this->name;
    }
}


$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

工厂模式

工厂模式是我们最常用的实例化对象模式,使用工厂方法代替new操作的一种模式。

使用工厂模式的好处是,通过你想要更改所实例化的类名等,则只需要更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方修改了。为系统结构提供灵活的动态扩展机制,减少了耦合。

实例

<?php 

header('Content-Type:text/html;charset=utf-8');

/**
 *简单工厂模式(静态工厂方法模式)
 */

//Interface people 人类
interface people{
    public function say();
}

//Class man 继承people的***类
class man implements people{
    public function say(){
        echo '我是***';
    }
}

//Class women 继承people的***类
class women implements people{
    public function say(){
        echo '我是***';
    }
}

// Class SimpleFactoty 工厂类
class SimpleFactory{
    //简单工厂里的静态方法,用于创建man对象
    static public createMan(){
        return new man();
    }

    //简单工厂里的静态方法,用于创建woman对象
    static public createWomen(){
        return new woman();
    }
}


$man = SimpleFactory::createMan();
$man->say();
$woman = SimpleFactory::createWomen();
$woman->say();
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例




声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议