资讯专栏INFORMATION COLUMN

PHP 设计模式之二——工厂模式

cc17 / 2203人阅读

摘要:连接邮件服务器的类可以连接邮件服务器的方法有,此时可以写一个工厂类负责实例化这几种连接方法,如果某一天对方增加了连接方法,那么直接在工厂类里做相应的修改即可。扩展性高,如果想增加一个产品,只要扩展一个工厂类或者是修改工厂的生产过程即可。

定义

工厂模式的使用频率比较高。它的定义为:定义一个类,该类主要负责系统的去实例化一些其它的类。通俗点说就是,你告诉我你需要哪个类的实例即可,其它的你不用管,我帮你去实例化,你只管用即可。

工厂对象可能会动态地创建产品对象的类,或者从对象池中返回一个对象,或者对所创建的对象进行复杂的配置,或者应用其他的操作。从定义上看,单例模式也是一种工厂模式的实现,因为它为你实例化了一个特定的对象供系统使用。

应用实例

数据库驱动:各个 WEB 框架的数据库驱动逻辑,其中就有工厂模式的影子。大多数的框架会支持多种数据库如 oracle / mysql / sql server 等,此时在配置项里,只需提供一下约定好的数据库平台的字符串名称即可,无需自己实例化数据库驱动。 WEB 框架收到要实例化的数据库名称后,调用工厂模式方法,实例化相应的数据库驱动后,供后续代码使用。

连接邮件服务器的类:可以连接邮件服务器的方法有 POP3,IMAP,HTTP ,此时可以写一个工厂类负责实例化这几种连接方法,如果某一天对方增加了 webSerives 连接方法,那么直接在工厂类里做相应的修改即可。

代码举例
class ConnectionFactory
{
    function static getConnection($db_class_name)
    {
        $db_class_name = strtolower($db_class_name);
        if (include_once "Drivers/" . $db_class_name . ".php") {
            $classname = "Driver_" . $db_class_name;
            return new $db_class_name;
        } else {
            throw new Exception ("The specify class driver file didn not found. ");
        }
    }
}

ConnectionFactory::getConnection("mysql");

ConnectionFactory::getConnection("oracle");

如果有了新的数据库驱动类,只需要在 drivers 下加入相应的驱动文件即可,当然要符合相应驱动规则。

优点

一个调用者想创建一个对象,只要知道其名称就可以了。封装了实例化过程,使用者不在需要关心过多的实例化过程,只需要提供约定好的实例化标识即可。

扩展性高,如果想增加一个“产品”,只要扩展一个工厂类或者是修改工厂的生产过程即可。 3. 屏蔽产品的具体实现,调用者只关心产品的接口,产品类不论如何变化都不再影响其实例化过程。

缺点

每次增加一个产品时,都需要增加或者修改一个具体类和对象实现工厂,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25648.html

相关文章

  • 全球互联网大约五分之二的网站竟然是用WordPress来创建的!

    摘要:目前已经成为全球最为流行的建站程序,根据的最新统计,的市场份额过去一年在持续增长。报告显示,市场份额过去一年增长了至,这意味着互联网上大约五分之二的网站是用创建的。资料显示,在年初,为所有网站提供了的支持。作为该年度的第三大主要核心版本。WordPress目前已经成为全球最为流行的CMS建站程序,根据 W3techs 的最新统计,WordPress 的市场份额过去一年在持续增长。W3tech...

    Tecode 评论0 收藏0
  • PHP 基于laravel框架获取微博数据之二 用户数据的使用

    摘要:以大量微博用户数据为基础可建立数据模型。当前微博除了用户自己,其他人是不能查看该用户所有粉丝数据的。 项目地址:https://github.com/daweilang/... 开始抓取微博数据的时候,只是想获得一条热门微博下的所有评论,因为里面有不少图片广告,所以想试试能不能分析出热门微博评论里的异常用户。 使用PHP的Laravel框架后,通过队列、命令等各种功能,最后构架了一套完...

    Sleepy 评论0 收藏0
  • Spring声明式事务管理之二:核心接口API

    摘要:事务管理结构事务管理有个左右,其中最核心的有个,分别是。事务管理主要结构如下三个核心接口源码解析接口是用于定义一个事务,它定义了事务管理的五大属性,在上一篇文章中有详细介绍。只需要装配一个实体管理工厂接口的任意实现。 1.Spring事务管理API结构   Spring事务管理API有100个左右,其中最核心的API有3个,分别是TransactionDefinition、   Pla...

    lykops 评论0 收藏0
  • PHP设计模式(一)简单工厂模式 (Simple Factory For PHP

    摘要:工厂模式使一个类的实例化延迟到其子类。参考系列源地址系列目录设计模式概述设计模式一简单工厂模式设计模式二工厂方法模式设计模式三抽象工厂模式设计模式四单例模式 一、什么是简单工厂模式 简单工厂 (Simple Factory)又称静态工厂方法模式(Static Factory Method Pattern)   使用的频率可以说是非常之高,它的官方解释为:定义一个用于创建对象的接口,让子...

    Hancock_Xu 评论0 收藏0
  • PHP设计模式(二)工厂方法模式(Factory Method)

    摘要:对于这个问题,接下来的工厂方法模式可以解决这个问题。二工厂方法模式的优点拥有良好的封装性,代码结构清晰。参考系列源地址系列目录设计模式概述设计模式一简单工厂模式设计模式二工厂方法模式设计模式三抽象工厂模式设计模式四单例模式 简单工厂简述: 简单工厂模式实现了产品类的代码跟客户端代码分离,但会有一个问题,优秀的代码是符合开闭原则如果你要加一个C类产品,你就要修改工厂类里面的代码,也就是说...

    zhjx922 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<