PHP设计模式之一:工厂模式(1)

工厂模式:工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类步骤。

为什么使用工厂模式:PHP中能够创建基于变量内容的类的新实例,减少主代码流中的基于条件复杂性; 同时如果类发生改变不需要所有的地方进行修改,只需要在工厂中进行修改。

细分为以下三种

简单工厂模式:与工厂方法比较,无法适应同种产品的增加,每增加一个产品都需要在工厂中增加一个产品的方法分支,这样的工厂不仅不封闭也让我们工作量增加,不能实现我们的‘懒’,能让程序做的事情,自己就不会再做。

工厂方法模式:与简单工厂模式相比较,拥有更加灵活的可以灵活增加新的产品,但是无法再深层次的增加产品的类型,只能在同层次的增加。

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口。与工厂方法相比更容易扩展产品的类型。

简单工厂:适用于生成数量少,功能简单的产品。

工厂类

Factory.php
<?php 

class Factory
{
    //实例化并返回需要的对象
    static function createMysql(){
        $db = new Mysql();
        return $db;
    }
}

小例使用

index.php

<?php 

//使用工厂模式的创建mysql对象的方法
$db = Factory::createMysql();

 其中可以在多个文件使用:index_0.php index_1.php......,但是因为都使用的是Factory类中的createMysql方法,所以当文件内容需要修改的时候,只需要更改工厂模式中的createMysql的方法

如:

实现不同的数据库的使用选择对象

index_99.php

<?php

//使用工厂模式的创建mysql对象的方法
$db = Factory::createMysql('sqlserver');

则其他文件不变,更改 Factory类的文件即可

<?php

class Factory
{
    static function createMysql($type = ''){
        if(type=='sqlserver'){
            $db = new Sqlserver();
        }else{
            $db = new Mysql();
        }
        return $db;
    }
}

当然这只是简单举例,也可以在createMysql方法中直接改变所有对象的连接数据库,这样就减少了我们后期更改的工作。

工厂模式可以任意命名这个静态还可以接受任意数据的参数,但是必须返回一个对象实例给调用对象。

猜你喜欢

转载自blog.csdn.net/root_admin_12138/article/details/81177830