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 10 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
php实现的CSS更新类实例
Sep 22 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
laravel5使用freetds连接sql server的方法
Dec 07 PHP
laravel admin实现分类树/模型树的示例代码
Jun 10 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 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/14 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python数据类型学习笔记
2016/01/13 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Python数据可视化之画图
2019/01/15 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Jupyter加载文件的实现方法
2020/04/14 Python
Keras loss函数剖析
2020/07/06 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
学校创先争优活动总结
2014/08/28 职场文书
出国导师推荐信
2015/03/25 职场文书
关于军训的感想
2015/08/07 职场文书
新手初学Java List 接口
2021/07/07 Java/Android