工厂模式主要是为了代码执行的时候更灵活地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设计模式----工厂模式的更多相关文章

  1. .NET设计模式: 工厂模式

    .NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html   .NET设计模式(1): ...

  2. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  3. [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  4. javascript 设计模式-----工厂模式

    所谓的工厂模式,顾名思义就是成批量地生产模式.它的核心作用也是和现实中的工厂一样利用重复的代码最大化地产生效益.在javascript中,它常常用来生产许许多多相同的实例对象,在代码上做到最大的利用. ...

  5. JavaScript设计模式——工厂模式

    工厂模式:是一种实现“工厂”概念的面上对象设计模式.实质是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行.创建一个对象常常需要复杂的过程,所以不 ...

  6. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  7. 学习:java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...

  8. 设计模式——工厂模式 (C++实现)

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累. ...

  9. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  10. 设计模式——工厂模式(Factory)

    要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 工厂模式定 ...

随机推荐

  1. CSS3制作日历

    目标是制作如下面DEMO显示的一个日历效果: HTML Markup 先来看看其结构: <div class="calendar"> <span class=&q ...

  2. Oracle SqlPlus 方向键的方法和解决的退格键失效

    SqlPlus中退格键和方向键的设置 在刚装好的Oracle中,我们使用SqlPlus会发现很的蹩脚,不仅退格键不好用,方向键也不行调出history.以下有几种解决方法. 1.能够使用ctrl+Ba ...

  3. Android-往来:包Group添加到联系人

    long groupId = Constant.createGroupId; ContentValues values = new ContentValues(); for(int i=0,len=C ...

  4. android微信付费

    原文地址:http://blog.csdn.net/intbird 微信官方文档地址:t=resource/res_main_tmpl&verify=1&lang=zh_CN" ...

  5. VS 文件自动定位功能

    在Visual Studio 中,当你在所有打开的文件中进行切换时,在Solution Explorer中也会自定定位到这个文件的目录下面,这个功能用来查找当前文件是非常有用.在Tools->O ...

  6. Visual Studio 2014

    开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1) 2014-06-06 18:04 by 梁逸晨, 2149 阅读, 29 评论, 收藏, 编辑 新特性 ...

  7. Http Pipeline详细分析(下)

    Http Pipeline详细分析(下) 文章内容 接上面的章节,我们这篇要讲解的是Pipeline是执行的各种事件,我们知道,在自定义的HttpModule的Init方法里,我们可以添加自己的事件, ...

  8. ASP.NET MVC应用程序更新相关数据

    为ASP.NET MVC应用程序更新相关数据 这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译, ...

  9. mvc项目如何在IIS7.5

    mvc项目如何在IIS7.5上发布的 1.在vs中打开你要发布的项目,右键属性找到发布 2.弹出发布web对话框,选择<新建配置文件...> 在弹出的对话框中输入一个配置文件名称,后确定 ...

  10. test maekdown 2

    Package Control Messages Markdown Preview: Sublime Text 2/3 Markdown Preview ======================= ...