PHP

设计模式之工厂方法

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

工厂方法是在简单工厂的基础上进一步抽象产生的一种设计模式,在新增产品时,简单工厂模式下需要修改原有的文件,不符合开闭原则,而使用工厂方法就可以避免修改原有的文件。

现在需要新增一种AccessModel,将原有的简单工厂修改为工厂方法。

下面是代码:
<?php

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


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

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

class AccessModel extends DataModel
{
    public function handle()
    {
        echo 'this is access';
    }
}


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

//具体工厂
class MysqlFactory extends IFactory
{
    public function create()
    {
        return new MysqlModel();
    }
}

class OracleFactory extends IFactory
{
    public function create()
    {
        return new OracleModel();
    }
}

class AccessFactory extends IFactory
{
    public function create()
    {
        return new AccessModel();
    }
}


$myFactory = new AccessFactory();
$myModel = $myFactory->create();
$myModel->handle();


这样 工厂方法的代码就完成了。
以后再新增其他数据库的支持时,只有新增类文件就可以了,不需要改动原本的类。

上一篇下一篇

猜你喜欢

热点阅读