设计模式之抽象工厂

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

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

现在我们的项目需要新增一个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数据库的支持,无疑改动的地方太多,这也是抽象工厂的一个不好的地方。如果想要使用起来更简单,还要进行一些改进。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容