php中使用接口实现工厂设计模式的代码


Posted in PHP onJune 17, 2012

接口在php只能起到约束类的定义作用,虽不像c#/java那么直观,但基于oop的封装要求,使用接口可以提高程序的可扩展性,如实现代理设计模式。

<?php 
//人类接口 
interface IHuman 
{ 
function GetName(); 
} 
//男人类,实现人类接口 
class ManClass implements IHuman 
{ 
//获取姓名方法 
public function GetName() 
{ 
return "I'm man."."<br>"; 
} 
} 
//女人类,实现人类接口 
class WomanClass implements IHuman 
{ 
//获取姓名方法 
public function GetName() 
{ 
return "I'm Woman."."<br>"; 
} 
} 
//类工厂,根据需要生产不同实例对象返回 
class ManFactory 
{ 
//根据参数获取实例对象 
public function GetIHuman($IHuman="man") 
{ 
if($IHuman=="woman") 
{ 
return new WomanClass(); 
} 
else if($IHuman=="man") 
{ 
return new ManClass(); 
} 
else 
{ 
return null; 
} 
} 
//直接获取woman类 
public function GetWoman() 
{ 
return new WomanClass(); 
//return new ManClass(); 
} 
//直接获取man类 
public function GetMan() 
{ 
return new ManClass(); 
} 
} 
$ManFactory=new ManFactory(); 
$ManClass=$ManFactory->GetIHuman(); 
echo $ManClass->GetName(); 
$IHuman=$ManFactory->GetIHuman("woman"); 
echo $IHuman->GetName(); 
$Woman=$ManFactory->GetWoman(); 
echo $Woman->GetName(); 
$Man=$ManFactory->GetMan(); 
echo $Man->GetName(); 
?>

运行结果:
I'm man.
I'm Woman.
I'm Woman.
I'm man.
PHP 相关文章推荐
PHP在XP下IIS和Apache2服务器上的安装
Sep 05 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
May 31 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
浅谈PHP封装CURL
Mar 06 PHP
php根据命令行参数生成配置文件详解
Mar 15 PHP
PHP实现文件上传操作和封装
Mar 04 PHP
php中get_object_vars()在数组的实例用法
Feb 22 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 #PHP
PHP的加密方式及原理
Jun 14 #PHP
php面向对象 字段的声明与使用
Jun 14 #PHP
PHP对象Object的概念 介绍
Jun 14 #PHP
深入了解PHP类Class的概念
Jun 14 #PHP
让PHP更快的提供文件下载的代码
Jun 13 #PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 #PHP
You might like
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
javascript验证身份证号
2015/03/03 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
Cpy和Python的效率对比
2015/03/20 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python编程使用协程并发的优缺点
2018/09/20 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
python SVM 线性分类模型的实现
2019/07/19 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
static关键字的用法
2013/10/07 面试题
办理信用卡工作证明
2014/01/11 职场文书
课内比教学心得体会
2014/09/09 职场文书
七年级地理教学计划
2015/01/22 职场文书
党员进社区活动总结
2015/05/07 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers