工厂是常见的设计模式的一种,通过工厂来产生类,降低系统的耦合度,从而提高开发的效率。
今天介绍的抽象工厂就是工厂模式的衍生。将工厂进行抽象,从而提高代码的灵活度。
比如我们需要一个工厂来制造自行车和汽车,如果是工厂模式的话,我们需要创建两个工厂,一个是汽车工厂,一个是自行车工厂。
class bikefactory
{
//生产自行车
}
class carfactory{
//生产汽车
}
那么我们在生产不同车辆的时候,就要初始化不同的类
createbike(bikefactory factory)
{
facotry->make();
}
createcar(carfactory factory)
{
factory->make();
}
其实我们可以看的出来,两个函数基本上是一致的,但是我们却需要写两个不同的函数来制造汽车和自行车。
为了避免这种不必要的重复,抽象工厂出现了。生产汽车和自行车都是生产车,可能生产工艺不一样,那我们先不管。
我们先来写一个车的工厂,不管你是汽车还是自行车。
<?php
/**
* Created by PhpStorm.
* User: xiaozhen
* Date: 2017/3/30
* Time: 11:50
*/
//抽象工厂
namespace App\Designer;
use App\Designer;
abstract class Factory
{
//定义一个抽象方法,等待具体的类来实现
abstract public function make();
}
class CarFactory extends Factory
{
//实现make方法
public function make()
{
return new Car();
}
}
class BikeFactory extends Factory
{
public function make()
{
// TODO: Implement make() method.
return new Bike();
}
}
class Car
{
public function __construct()
{
echo "我是一辆汽车";
}
}
class Bike
{
public function __construct()
{
echo "我是一辆自行车";
}
}
class testunit
{
static public function make(Factory $factory)
{
$factory->make();
}
}
testunit::make(new CarFactory());