搜索
博主信息
博文 42
粉丝 3
评论 2
访问量 104342
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP的设计模式
Whitney的博客
原创
1595人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学