美文网首页
2、php工厂模式

2、php工厂模式

作者: 水电梁师傅 | 来源:发表于2018-07-14 10:26 被阅读13次

书接上文,简单工厂模式。发现简单工厂模式有着致命的问题,不符合开闭原则;

所谓开闭原则,对于扩展是开放的,对于修改是关闭的,这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。

因为设计模式是从编译语言那里过来的,所以编译语言在编译后不方便修改,所以这个时候整个项目编译可能需要好几个钟,这样就不合适,所以需要考虑开闭原则以缩短项目工期。

那代码里面究竟出现了什么,为什么说不符合开闭原则,因为ifelse那里,假设如果有很多的数据库,那么意味着ifelse会增加更多的判断,假设未来还有更多的数据库新增,这种修改是不符合所想的,我们需要一种新的结构,对工厂类本身不进行修改,或者说不希望对原来的代码进行修改。

于是,我新建一个工厂接口。创建数据库类实现工厂接口

interface Db
{
         public function conn();
}

interface Factory
{
    public function createdb();
}
class MysqlDb  implements Db
{
    public function conn()
    {
        echo 'mysql已连接';
        echo '<br>';
    }
}
class MysqlFactory implements  Factory
{
    public function createdb()
    {
        return new MysqlDb();
    }
}

$mysqlfctory = new MysqlFactory();
$mysqldb = $mysqlfctory->createdb();
$mysqldb->conn()

这样,以后无论是怎么新建数据库连接都不用修改代码了,只需要继承工厂接口和数据库接口即可,比方说,新建一个oracle的数据库这时候只需要这样写

interface Db
{
         public function conn();
}

interface Factory
{
    public function createdb();
}
class MysqlDb  implements Db
{
    public function conn()
    {
        echo 'mysql已连接';
        echo '<br>';
    }
}
class MysqlFactory implements  Factory
{
    public function createdb()
    {
        return new MysqlDb();
    }
}
class OracleDb implements  Db
{
    public function conn()
    {
        echo 'oracle已连接';
    }
}
class OracleFactory implements  Factory
{
    public function createdb()
    {
        return new OracleDb();
    }
}
$mysqlfctory = new MysqlFactory();
$mysqldb = $mysqlfctory->createdb();
$mysqldb->conn();

$oraclefactory = new OracleFactory();
$oracledb =  $oraclefactory->createdb();
$oracledb->conn(); 

只需要新增类,而不需要修改原来的代码,工厂方法,完成

相关文章

  • 2、php工厂模式

    书接上文,简单工厂模式。发现简单工厂模式有着致命的问题,不符合开闭原则; 所谓开闭原则,对于扩展是开放的,对于修改...

  • PHP 完整实战23种设计模式

    PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者模式 PHP实战结构型模式 桥接模式 享元...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式

    php关键字 1.工厂模式分类 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式; 1.1. ...

  • ThinkPHP设计模式与Trait技术

    阅读原文 设计模式 单例模式 工厂模式 对象注册树 示例 运行 Trait技术 自 PHP 5.4.0 起,PHP...

  • 《PHP设计模式大全》系列分享专栏

    php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页 介绍php设计模式中的工厂模式...

  • 策略模式和工厂模式在促销系统下的应用

    策略模式和工厂模式在促销系统下的应用 标签: 设计模式 策略模式 工厂模式 促销系统 php 设计模式为我们提供了...

  • php设计模式(2) 注册树模式

    php设计模式(2) 注册树模式 注册树模式 优点 不论通过其他模式(工厂/单例)创建的实例,都没有很好的解决调用...

  • pattern设计模式

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

网友评论

      本文标题:2、php工厂模式

      本文链接:https://www.haomeiwen.com/subject/akyuuftx.html