php设计模式----工厂模式

工厂模式主要是为了代码执行的时候更灵活地new对象,就像工厂流水线一样,批量生产出产品。

目的:简化对象生成过程,更加灵活。

例子如下:

<?php
/**
 * User: freephp
 * Date: 2015/9/23
 * Time: 16:58
 */

interface Medias {
    function show();  // 展现效果的功能
    function notify(); //有更新通知功能
}


class Picture implements Medias{
    public function show() {
        echo "我是图片服务,高清无码!
";
    }
    public function notify() {
        echo "新的一波美图来了,请查看!
";
    }
}

class Video implements Medias{
    public function show() {
        echo "我是视频服务,高清流畅,不卡顿!
";
    }
    public function notify() {
        echo "新的一波视频来了,请查看!
";
    }
}

class Sound implements Medias{
    public function show() {
        echo "我是音频服务,无损音质!
";
    }
    public function notify() {
        echo "新的一波音频来了,请查看!
";
    }
}

/**
* 工厂类,负责对象生产
*/
class Factory {
    private static function getValidSource() {
        return array(
            "Picture",
            "Video",
            "Sound"
        );
    }
    public static function create($sourceName) {
        if(in_array($sourceName, self::getValidSource())) {
            return new $sourceName();

        } else {
            echo "暂不支持这种服务!
";die();
        }
    }
}

// -------------客户端--------
$soundSer = Factory::create('Sound');
$soundSer->notify();

$soundSer->show();

$Ser = Factory::create('Picture');
$Ser->notify();
$Ser->show();

输出结果如下:

新的一波音频来了,请查看!
我是音频服务,无损音质!
新的一波美图来了,请查看!
我是图片服务,高清无码!

代码中定义了一个接口Medias,清晰指出了要实现的通用功能。而Factory类中配置了合法的对象类数组,防止了非法服务对象的创建。(特殊服务要不得!)利用php的灵活特性,动态生成不同服务对象,又基于接口编程,实现了同一接口,不同服务的体现。

一般来说,如果Picture类和其他服务类在不同的文件中,则需要在Factory的create中require进来,文件名命名按照一定规律,然后截取获得对应文件,再new出对应对象。
原文地址:https://www.cnblogs.com/freephp/p/4832882.html