国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP面向?qū)ο缶幊淘O計模式(三)工廠模式

2019-11-06 07:07:25
字體:
供稿:網(wǎng)友

介紹

  在前面文章中提到的策略模式提到過,需要客戶自行選擇類并創(chuàng)建實例,那么這個選擇的過程放在哪里呢,如果在每一個需要此對象的地方都new一個,那必然會有代碼重復,而且如果修改也會很麻煩,這樣不符合面向?qū)ο蟮姆庋b原則。所以,工廠模式出現(xiàn)了。   由工廠類根據(jù)參數(shù)來決定創(chuàng)建出哪一種產(chǎn)品類的實例; 工廠類是指包含了一個專門用來創(chuàng)建其他對象的方法的類。所謂按需分配,傳入?yún)?shù)進行選擇,返回具體的類。工廠模式的最主要作用就是對象創(chuàng)建的封裝、簡化創(chuàng)建對象操作。 簡單的說,就是調(diào)用工廠類的一個方法(傳入?yún)?shù))來得到需要的類;

實現(xiàn)方法

  一個工廠類擁有一個靜態(tài)的方法,用來接受一些輸入,并根據(jù)輸入決定該創(chuàng)建哪個類的實例。

例子

<?php/*** 基類,也可以寫成接口*/abstract class User { PRotected $name = NULL; function __construct($name) { $this->name = $name; } function getName(){ return $this->name; } function hasReadPermission(){ return true; } function hasModifyPermission(){ return true; } function hasDeletePermission(){ return false; } function wantsFlashInterface(){ return true; }}/*** 客戶類*/class GuestUser extends User{}/*** 顧客子類*/class CustomerUser extends User{ function hasModifyPermission(){ return true; }}/*** 管理員子類*/class AdminUser extends User{ function hasModifyPermission(){ return true; } function hasDeletePermission(){ return true; } function wantsFlashInterface(){ return false; }}/*** 工廠類*/class UserFactory { private static $users = array('Andi' => "admin", 'Stig' =>"guest", 'Der'=>"customer"); static function Create($name){ if(!isset(self::$users[$name])){ // 用戶不存在 } switch (self::$users[$name]) { case 'guest': return new GuestUser($name); break; case 'admin': return new AdminUser($name); break; case 'customer': return new CustomerUser($name); break; default: // 錯誤 break; } }}// 調(diào)用方法省略?>

把創(chuàng)建對象的過程封裝起來,也方便后期添加更多的方法。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 漳平市| 双柏县| 聂拉木县| 庆元县| 公主岭市| 古浪县| 多伦县| 乐山市| 城固县| 香港 | 甘洛县| 新郑市| 古蔺县| 山丹县| 临桂县| 焦作市| 东丰县| 右玉县| 托克逊县| 南康市| 黄龙县| 湘乡市| 乐亭县| 桐梓县| 乌拉特中旗| 嵊泗县| 台中县| 通化市| 东安县| 玉田县| 海丰县| 和平区| 惠安县| 宜君县| 周至县| 德阳市| 垫江县| 全州县| 仪征市| 大厂| 恩施市|