PHP

设计模式之抽象工厂

2018-01-07  本文已影响0人  守望星空l

抽象工厂是工厂模式中最抽象的一种模式。

工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构。

现在我们的项目需要新增一个UserModel,通过它来操作用户表的相关数据,也需要ProductModel,来操作产品相关的数据。
数据库可能使用Mysql,也可能使用Oracle。

使用抽象工厂模式来实现。

下面是代码:
<?php

//抽象产品类
abstract class MysqlModel
{
    abstract public function handle();
}


//具体产品
class MysqlUserModel extends MysqlModel
{
    public function handle()
    {
        echo 'this is MysqlUserModel';
    }
}

class MysqlProductModel extends MysqlModel
{
    public function handle()
    {
        echo 'this is MysqlProductModel';
    }
}



abstract class OracleModel
{
    abstract public function handle();
}

class OracleUserModel extends OracleModel
{
    public function handle()
    {
        echo 'this is OracleUserModel';
    }
}

class OracleProductModel extends OracleModel
{
    public function handle()
    {
        echo 'this is OracleProductModel';
    }
}



//抽象工厂类
abstract class IFactory
{
    abstract public function createMysqlModel();

    abstract public function createOracleModel();
}

//具体工厂
class UserModelFactory extends IFactory
{
    public function createMysqlModel()
    {
        return new MysqlUserModel();
    }

    public function createOracleModel()
    {
        return new OracleUserModel();
    }
}

class ProductModelFactory extends IFactory
{
    public function createMysqlModel()
    {
        return new MysqlProductModel();
    }

    public function createOracleModel()
    {
        return new OracleProductModel();
    }
}

$myFactory = new UserModelFactory();
$myModel = $myFactory->createMysqlModel();
$myModel->handle();

这样 抽象工厂的代码就完成了。
如果这个时候想新增一个Access数据库的支持,无疑改动的地方太多,这也是抽象工厂的一个不好的地方。如果想要使用起来更简单,还要进行一些改进。

上一篇下一篇

猜你喜欢

热点阅读