php设计模式-工厂模式
2018-06-22 05:36:01来源:未知 阅读 ()
封装、继承、多态为oop的三大核心特性,我们可以根据这些特性,使用工厂模式。
工厂模式:在有些时候,需要创建基类的子类的一个具体实例,可以通过工厂模式实现,通常一个工厂类拥有一个静态的方法,用来接收一些输入,并根据输入决定创建哪个类的实例(通常是一个子类)
假设,我们有一个这样的需求,网站有3种用户:管理员,会员,游客,这3种用户具有不同的权限和后台管理页面,通常管理员的后台是固定的,游客和会员根据类型调用不同的页面
1,通过oop基本的3大特性,实现用户分层,权限和后台进行定制
1 abstract class User { 2 protected $name = NULL; 3 function __construct( $name ) { 4 $this->name = $name; 5 } 6 function getName(){ 7 return $this->name; 8 } 9 function hasReadPermission(){ 10 return true; 11 } 12 function hasModifyPermission(){ 13 return false; 14 } 15 function hasDeletePermission(){ 16 return false; 17 } 18 function wantsFlashInterface(){ 19 return true; 20 } 21 } 22 23 class GuestUser extends User { 24 } 25 26 class CustomerUser extends User { 27 function hasModifyPermission(){ 28 return true; 29 } 30 } 31 32 class AdminUser extends User { 33 function hasModifyPermission(){ 34 return true; 35 } 36 function hasDeletePermission(){ 37 return true; 38 } 39 function wantsFlashInterface(){ 40 return false; 41 } 42 }
二,通过工厂类控制创建对应的子类实例
class UserFactory { private static $users = array( "ghostwu" => "admin", "lisi" => "guest", "wangwu" => "customer" ); static function create( $name ){ if( !isset( self::$users[$name] ) ) { echo $name . ",这个用户不存在" . PHP_EOL; return ; } switch( self::$users[$name] ){ case "admin": return new AdminUser( $name ); case "guest": return new GuestUser( $name ); case "customer": return new CustomerUser( $name ); default: return "不存在该用户类型"; } } }
三、结合之前的封装,完善业务
function boolToStr( $b ){ if( $b == true ){ return "yes" . PHP_EOL; }else { return "no" . PHP_EOL; } } function displayPermissions( User $obj ){ echo $obj->getName() . ",该用户权限:" . PHP_EOL; echo "read:" . boolToStr( $obj->hasReadPermission() ); echo "modify:" . boolToStr( $obj->hasModifyPermission() ); echo "delete:" . boolToStr( $obj->hasDeletePermission() ); } function displayRequirements( User $obj ){ echo "刷新后台界面:" . boolToStr( $obj->wantsFlashInterface() ); } $logins = array( "ghostwu", "lisi", "wangwu" ); foreach( $logins as $login ) { displayPermissions( UserFactory::create( $login ) ); displayRequirements( UserFactory::create( $login ) ); echo "----------------------------" . PHP_EOL; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash