设计模式-工厂模式

设计模式-简单工厂模式

说明

工厂模式是创建型模式的一种,分为简单工厂模式,工厂模式,抽象工厂模式,简单工厂可以称之为工厂模式的一个特例


简单工厂

简单工厂:将调用者和创建者分离,实现解耦,调用者直接向工厂请求,通过工厂去选择需要实例化的对象,用一个单独的类来做这个创建实例的过程。

请输入图片描述

<h5>服务端操作类</h5>

<?php
/**
 * Interface db 链接数据库接口
 */
interface db{
    function conn(); //连接方法
}

//服务端接口
/**
 * Class dbMysql
 */
class dbMysql implements db {
    public function conn(){
        echo "连接上了Mysql";
    }
}

/**
 * Class dbSql
 */
class dbSql implements db{
    public function conn(){
        echo "连接上了sql";
    }
}

<h5>工厂类</h5>

/**
 * Class Factory
 */
class Factory{
    public static function creatDB($type){
        if($type == "mysql"){
            return new dbMysql();
        }elseif($type == 'sql'){
            return new dbSql();
        }else{
            throw new Exception("没有该类型数据库");
        }
    }
}
$objSql=Factory::creatDB('mysql');
$objSql->conn();   

通过工厂类来控制连接不同的数据库,如果要新增一个oracle连接,直接创建一个dbOracle来继承db类,然后在工厂类中进行创建就好。

工厂模式

工厂模式:工厂模式是简单工厂的晋级版,在简单工厂模式下,如果需要新增一个类,需要更改工厂类代码,违反了封闭开放原则,而工厂模式则解决的这个问题。
https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png

<?php
/**
 * Interface db 链接数据库接口
 */
interface db{
    function conn(); //连接方法
}

//服务端接口
/**
 * Class dbMysql
 */
class dbMysql implements db {
    public function conn(){
        echo "连接上了Mysql";
    }
}

/**
 * Class dbSql
 */
class dbSql implements db{
    public function conn(){
        echo "连接上了sql";
    }
}


interface Factory{
    function  creatDB();
}

class MysqlFactory implements Factory {

    function creatDB()
    {
        // TODO: Implement creatDB() method.
        return new dbMysql();
    }
}

class SqlFactory implements Factory{

    /**
     * @return mixed
     */
    function creatDB()
    {
        // TODO: Implement creatDB() method.
        return new dbSql();
    }
}

$db=new MysqlFactory();
$objSql = $db->creatDB();
$objSql ->conn();

如果要新增连接方式,直接新增新增连接方式,新增工厂创建类就好。

结尾

心如花木,向阳而生。

添加新评论