专栏首页仙士可博客php设计模式-工厂模式

php设计模式-工厂模式

设计模式教程地址:http://www.imooc.com/learn/236

设计模式参考地址:http://larabase.com/collection/5/post/143

本来我们要获取一个类的实例,需要用到new关键字。但是如果new 直接写到业务代码里,一个类在很多地方都实例化过,以后要是这个类出了什么问题,比如要改个名字(实际中,你更多的可能是修改构造函数方法),那么就尴尬了,需要改很多地方。

工厂模式,顾名思义,就是不用new来获得实例,而是把业务类放进一个工场类里,由工厂(类)『生产』出对应的实例。

<?php

class Factory
{
     //获取一个路由类
    public static function getRouteInstance()
    {
        $alias = '\Sphp\Core\lib\Route';
        $instance = self::createInstance($alias);
        return $instance;
    }

    //获取一个配置类
    public static function getConfInstance()
    {
        $alias = '\Sphp\Core\lib\Conf';
        $instance = self::createInstance($alias);
        return $instance;
    }

    //创建一个静态实例
    private static function createStaticInstance($alias)
    {
        $instance = Register::_get($alias);
        if (!$instance) {
            $instance = $alias::getInstance();
            Register::_set($alias, $instance);
        }
        return $instance;
    }

    //创建一个实例
    private static function createInstance($alias)
    {
        $instance = Register::_get($alias);
        if (!$instance) {
            $instance = new $alias();
            Register::_set($alias, $instance);
        }
        return $instance;
    }

}

调用方法:

$route = \Sphp\Core\Factory::getRouteInstance();

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • php设计模式-注册器模式

    设计模式参考地址:http://larabase.com/collection/5/post/143

    仙士可
  • redis 持久化

    save 900 1 的意思为,每当900秒,如果最少变动了一个key值,则数据落盘

    仙士可
  • tp框架事务处理实例和理解

    仙士可
  • php init()和__construct() 区别

    __construct(): 是PHP内置的构造函数,实例化之前 PHP 解析引擎自动调用,做一些初始化的工作或者外部服务器检测的工作。在实例化对象之前需要做的...

    solate
  • Web Notification桌面推送消息

    以上的问题其实都很好解决,MDN 上有很多配置可以去看一下,配置啥,图标呀,图片呀,标题呀,是否强制用户交互呀,等等的操作都在MDN 有介绍,接下来的我觉得才可...

    我乃小神神
  • 相杀开启,微信关闭苹果用户赞赏背后的潜台词

    孟永辉
  • JS:debounce、throttle

    如果我们监听这些事件,并按浏览器的触发频率响应,极可能造成页面卡顿、抖动,甚至浏览器崩溃。

    WEBJ2EE
  • scrapy setting配置及说明

    参考文档http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/settings.html#topics-setti...

    周小董
  • Adobe与Salesforce真的要正面交锋了吗?

    有分析人士表示,随着Adobe公司进入助推企业数字化转型的领域,它也真正开始了与客户关系管理软件专家Salesforce的竞争。 Cowen分析师Derrick...

    人称T客
  • mysql简单基础

    枚举:enum,enum('男','女'),你男可以用1表示,1对应男,2就是女,这就是枚举。

    不断折腾

扫码关注云+社区

领取腾讯云代金券