工厂模式(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

 

posted @ 2021-09-13 15:51  感情就是后人乘凉  阅读(123)  评论(0编辑  收藏  举报