标签:
工厂模式主要是为了代码执行的时候更灵活地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 "我是图片服务,高清无码!\n";
}
public function notify() {
echo "新的一波美图来了,请查看!\n";
}
}
class Video implements Medias{
public function show() {
echo "我是视频服务,高清流畅,不卡顿!\n";
}
public function notify() {
echo "新的一波视频来了,请查看!\n";
}
}
class Sound implements Medias{
public function show() {
echo "我是音频服务,无损音质!\n";
}
public function notify() {
echo "新的一波音频来了,请查看!\n";
}
}
/**
* 工厂类,负责对象生产
*/
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 "暂不支持这种服务!\n";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出对应对象。
标签:
原文地址:http://www.cnblogs.com/freephp/p/4832882.html