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文本数据库的搜索方法
Oct 09 PHP
php 之 没有mysql支持时的替代方案
Oct 09 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
md5 16位二进制与32位字符串相互转换示例
Dec 30 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
thinkphp 验证码 的使用小结
May 07 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 PHP
PHP数组与字符串互相转换实例
May 05 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
Python实现远程调用MetaSploit的方法
2014/08/22 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
Python编写百度贴吧的简单爬虫
2015/04/02 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
公司活动方案范文
2014/03/06 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
家长对孩子的寄语
2015/02/26 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
2015年基建工作总结范文
2015/05/23 职场文书