国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 大连市| 通许县| 张家界市| 小金县| 民县| 江口县| 丰城市| 南丹县| 博湖县| 木里| 岫岩| 长治市| 长岭县| 鲜城| 沅江市| 竹山县| 廊坊市| 河西区| 琼海市| 沙田区| 德化县| 西青区| 登封市| 绥宁县| 梁河县| 平遥县| 徐汇区| 集安市| 海安县| 兴化市| 桦川县| 霍州市| 蓬安县| 合川市| 安远县| 宁陕县| 文水县| 宽城| SHOW| 大荔县| 昆明市|