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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
php 操作excel文件的方法小结
Dec 31 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
php表单文件iframe异步上传实例讲解
Jul 26 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
PHP实现网上点歌(二)
2006/10/09 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
js实现简单的验证码
2015/12/25 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
Python基础入门之seed()方法的使用
2015/05/15 Python
实例讲解python中的协程
2018/10/08 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
django 自定义过滤器的实现
2019/02/26 Python
python操作链表的示例代码
2020/09/27 Python
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
三严三实对照检查材料
2014/08/25 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
Golang ort 中的sortInts 方法
2022/04/24 Golang