简单工厂模式

11.3k 4评论

工厂模式,就是负责生成其他对象的类或方法。

1 类实现

比如,我们有一些类,它们都继承自交通工具类:

interface Vehicle
{
    public function drive();
}

class Car implements Vehicle
{
    public function drive()
    {
        echo '汽车靠四个轮子滚动行走。';
    }
}

class Ship implements Vehicle
{
    public function drive()
    {
        echo '轮船靠螺旋桨划水前进。';
    }
}

class Aircraft implements Vehicle
{
    public function drive()
    {
        echo '飞机靠螺旋桨和机翼的升力飞行。';
    }
}

再创建一个工厂类,专门用作类的创建,:

class VehicleFactory
{
    public static function build($className = null)
    {
        $className = ucfirst($className);
        if ($className && class_exists($className)) {
            return new $className();
        }
        return null;
    }
}

工厂类用了一个静态方法来创建其他类,在客户端中就可以这样使用:

VehicleFactory::build('Car')->drive();
VehicleFactory::build('Ship')->drive();
VehicleFactory::build('Aircraft')->drive();

省去了每次都要new类的工作。

2 解决

 

 

参考资料:

  1. Design Patterns: The Simple Factory Pattern
  2. Understanding the Factory Method Design Pattern
  3. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

4 条评论

x
xflyhack says: 回复

还能不能在给出点具体的使用场景和例子呢

带头大哥 says: 回复

感觉使用new去实现类,不更简单?何必多此一举?

1
1 says:

如果你多处地方都用了new,那有一天命名需要改动的时候是不是得搜索每一行代码去改,而工厂避免了这种情况

v
vasks says: 回复

这是简单工厂!!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

昵称 *