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 array_push 数组函数
Dec 26 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
php的ddos攻击解决方法
Jan 08 PHP
PHP技术开发微信公众平台
Jul 22 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
Laravel中的Auth模块详解
Aug 17 PHP
php微信公众号开发之现金红包
Apr 16 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
phpquery中文手册
Mar 18 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下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
Python群发邮件实例代码
2014/01/03 Python
Python采集腾讯新闻实例
2014/07/10 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python使用type动态创建类操作示例
2020/02/29 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
酒店七夕情人节活动策划方案
2014/08/24 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS