--------------------------------------------------------------
<?php //说到底是语言不够灵活导致的 class M{ } class S{ } class Factory{ function static getInstance($type){ if($type=='M'){ return new M(); }elseif($type='S'){ return new S(); } } }
------------------------------------------------------------------------------
<?php //开放封闭元素,尽量通过新增类来实现, //不通过修改类来实现 class A{ } class B{ } class C{ } class D{ } interface Factoty{ public static function getInstance(); } class AFactoty implements Factoty{ public static function getInstance(){ return new A(); } } class BFactoty implements Factoty{ public static function getInstance(){ return new B(); } } class CFactoty implements Factoty{ public static function getInstance(){ return new C(); } } class DFactoty implements Factoty{ public static function getInstance(){ return new D(); } } $fact='DFactoty'; $db=DFactoty::getInstance(); print_r($db);
注意:抽象接口中有一个抽象方法是为了生成对应的工厂的,称之为抽象工厂