php设计模式之工厂模式

工厂模式:

 

工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象。

 

减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码。

通俗的说,以前创建一个对象要使用new,现在把这个过程封装起来了。

假设不使用工厂模式:那么很多地方调用类a,代码就会这样子创建一个实例:new a(),假设某天需要把a类的名称修改,意味着很多调用的代码都要修改。

建立一个工厂(一个函数或一个类方法)来制造新的对象,它的任务就是把对象的创建过程都封装起来,

创建对象不是使用new的形式了。而是定义一个方法,用于创建对象实例。

    工厂方法:

比如你的工厂叫做“香烟工厂”,那么可以有“七匹狼工厂”“中华工厂”等,但是,这个工厂只生厂一种商品:香烟;

 

抽象工厂:无法描述它到底生产什么产品,它生产很多类型的产品(所以抽象工厂就会生成子工厂)

 

你的工厂是综合型的,是生产“一系列”产品,而不是“一个”,比如:生产“香烟”,还有“啤酒”等。然后它也可以有派生出来的具体的工厂,但这些工厂都是生产这一系列产 品,只是可能因为地域不一样,为了适应当地人口味,味道也不太一样。

 

工厂模式:理解成只生成一种产品的工厂。比如生产香烟的。

 

工厂方法:工厂的一种产品生产线 。比如键盘的生成过程。

 

< php

/**

 * 工厂方法模式

 *

 * 定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使用一个类的实例化延迟到其子类

*/

 

/*

class DBFactory

{

    public static function create($type)

    {

        swtich($type)

        {

            case "Mysql":

                return new MysqlDB(); break;

            case "Postgre":

                return new PostgreDB(); break;

            case "Mssql":

                return new MssqlDB(); break;

        }

    }

}

*/

class DBFactory

{

   publicstaticfunction create($type)

    {

   $class=$type."DB";

   returnnew$class;

    }

}

 

interface DB

{

   publicfunction connect();

   publicfunctionexec();

}

 

class MysqlDB implements DB

{

   publicfunction __construct() {

   echo"mysql db<br/>";

    }

 

   publicfunction connect() {

    }

 

   publicfunctionexec() {

    }

}

 

class PostgreDB implements DB

{

   publicfunction __construct() {

   echo"Postgre db<br/>";

    }

 

   publicfunction connect() {

   }

 

   publicfunctionexec() {

     } 

 

class MssqlDB implements DB

{

   publicfunction __construct() {

   echo"mssql db<br/>";

    }

 

   publicfunction connect() {

    }

   publicfunctionexec() {

    }

}

 

 

$oMysql= DBFactory::create("Mysql");

$oPostgre= DBFactory::create("Postgre");

$oMssql= DBFactory::create("Mssql");


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。