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代码
Dec 06 PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
smarty半小时快速上手入门教程
Oct 27 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
Aug 23 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
利用PHP命令行模式采集股票趋势信息
Aug 09 PHP
Zend Framework常用校验器详解
Dec 09 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
jQuery操作属性和样式详解
2016/04/13 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
浅谈django orm 优化
2018/08/18 Python
python进行文件对比的方法
2018/12/24 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
XML文档面试题
2015/08/05 面试题
统计员岗位职责
2013/11/14 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
导师对论文的学术评语
2015/01/04 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang