码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-09-23 18:58:04      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

工厂模式主要是为了代码执行的时候更灵活地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出对应对象。

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

标签:

原文地址:http://www.cnblogs.com/freephp/p/4832882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!