第3课:设计模式之工厂模式

工厂模式 是一种类,它具有一些抽象出来的某些公共方法或者仅仅作为产品类的调度。您可以使用工厂类创建对象,而不直接使用new来实例化对应的产品。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。

举个通俗的例子
我这里有个GodeyeFactory的工厂类
class GodeyeFactory {
	
	private static $instances = array();

	public static function getInstance($module = '') {
	    if(!isset(self::$instances[$module])){
	        include_once __DIR__ . '/GodeyeAbst.class.php';
	        if ($module) {
		    $m = ucwords($module) . 'Imple';
		    include_once  __DIR__ . '/' . $m . '.class.php';
		    if(!class_exists($m)){
		        die();
		    }
		    self::$instances[$module] = new $m($module);
	        }
	    }
	    return self::$instances[$module];
	}
}
然后你有若干产品,比如go语言教程类Go对应go.php文件,PHP语言教程类Php对应php.php文件

当你想调用go.php中类Go的方法时,通过GodeyeFactory::getInstance('go')->方法名()来调用

工厂类就像一个总的调度车间,按需加载对应的类

当然了,也可以再发散下,getInstance方法可以不是初始化,而是某种功能,是一个方法
工厂类只是抽象出这个功能,根据传入参数不同,加载不同的类,调用不同类中的功能方法