• 工厂模式(Factory Pattern)


    使用场景 :

    1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

    2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

    3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

    下面以切换数据库做简略举例

    实现:

    1.创建接口

      Shape.php

    <?php
    
    
    interface Shape
    {
        /**
         * 创建接口
         * @return mixed
         */
        public function db();
    }

    2.创建实现接口的实体类

    MySQL.php
    <?php
    
    include  'Shape.php';
    
    class MySQL implements Shape
    {
        /**
         * 实现接口
         * @return mixed|void
         */
        public function db()
        {
            // TODO: Implement db() method.
            return 'Mysql';
        }
    }
    SQLite.php
    <?php
    
    class SQLite implements Shape
    {
        /**
         * 实现接口
         * @return mixed|void
         */
        public function db()
        {
            // TODO: Implement db() method.
            return 'SQLite';
        }
    }

    3.创建工厂类

     Factory.php

    <?php
    
    include 'MySQL.php';
    include 'SQLite.php';
    
    class Factory
    {
        /**
         * 创建一个工厂类,生成基于给定信息的实体类的对象。
         * @param $string
         * @return MySQL|SQLite|string
         */
        public function getShape($string)
        {
            if ($string==''){
                return '';
            }elseif (strtoupper($string)=='MYSQL'){
                return new MySQL();
            }elseif (strtoupper($string)=='SQLITE'){
                return new SQLite();
            }
            return '';
        }
    }

    测试

    index.php

    <?php
    include 'Factory.php';
    
    //实例化工厂
    $factory = new Factory();
    //获取MYSQL对象
    $demo1 = $factory->getShape('mysql');
    //调取db方法
    echo $demo1->db();
    
    echo '<br/>';
    echo '<br/>';
    
    //获取SQLite对象
    $demo2 = $factory->getShape('sqlite');
    //调取db方法
    echo $demo2->db();

    运行index.php

    你优秀了,自然有对的人与你并肩,错的人迟早走散,而相爱的终将再相逢。
  • 相关阅读:
    [GDOI2018]滑稽子图
    单位根反演学习笔记
    ODOO/OPENERP的网页模块QWEB简述
    odoo中的QWeb模板引擎
    项目管理)沟通管理
    从vc6升级到vc7的一些问题及解决方法
    vc++ 2005 发布程序
    颜色取反
    几个VC6.0到VC9.0的错误解决方案
    测试计划测试用例
  • 原文地址:https://www.cnblogs.com/szrhsd/p/15262764.html
Copyright © 2020-2023  润新知