工厂模式也是最常用的设计模式之一,基本所有的框架都会利用工厂模式来实现解耦.
顾名思义,工厂模式就是一个工厂,工厂是用来生产产品的,这里以一个服装工厂为例.
<?php class Cloth { public function __construct() { echo "生产了一件衣服<br>"; } } class Sweater { public function __construct() { echo "生存了一件毛衣<br>"; } } class Factory { public static function make($product) { switch ($product){ case 'yifu': return new Cloth(); case 'maoyi': return new Sweater(); default: echo "还没有这种产品<br>"; } } } /*传统模式*/ //需要一件衣服 $cloth = new Cloth(); //又需要一件毛衣 $sweater = new Sweater(); /*工厂模式*/ $cloth2 = Factory::make('maoyi'); $sweator = Factory::make('sweator');
如上文,可以看到传统模式下会带来比较大的耦合, 如果Cloth类改了个名字,那么就有多处需要Cloth一同改名.
而工厂模式,依赖的是工厂出产的产品,标准化,模式化.
也许从这里还看不出工厂模式的优点, 当工厂模式和其他的设计模式配合使用,就会带来许多有意思的特性.
比如laravel的核心容器,就可以理解为一个超级工厂, 生产线和产品都是动态确定的.