zoukankan      html  css  js  c++  java
  • 工厂模式(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

    你优秀了,自然有对的人与你并肩,错的人迟早走散,而相爱的终将再相逢。
  • 相关阅读:
    Bootstrap 4/3 页面基础模板 与 兼容旧版本浏览器
    Asp.net core 项目实战 新闻网站+后台 源码、设计原理 、视频教程
    C# 数据类型转换 显式转型、隐式转型、强制转型
    C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别
    C#/Entity Frame Core 使用Linq 进行分页 .Skip() .Take() 的使用方法
    利用 Xunsearch 搭建搜索引擎、内容搜索实战
    Delphi
    Python
    Python
    Python
  • 原文地址:https://www.cnblogs.com/szrhsd/p/15262764.html
Copyright © 2011-2022 走看看