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

首頁 > 編程 > PHP > 正文

PHP面向對象編程設計模式(一)策略模式

2019-11-06 07:12:31
字體:
來源:轉載
供稿:網友

(一)什么是面向對象編程

  面向對象(OO)的定義是什么,在面向對象的入門課程C++(或者JAVA)中,封裝數據和方法好像是面向對象最重要的一個特點,當然還有基于繼承實現的多態和重載。其實每一種OOP語言,由于彼此功能上的差異性,這些特點只能適用于某一種特定的任務。   比較公認的一點是,開發面向對象的軟件不僅要注重語言和語法特性,設計思想也是尤其重要的一點。相對于面向過程的語言,面向對象的語言更容易有優秀的設計思想(參考社區中話題),由于面向對象的各種特性,使其更容易實現出較為復雜、考慮情況更為多樣的的程序。   同樣,在php開發者中,比較常用的面向對象的設計有幾種設計模式,今天我們來全面地了解一下這些模式,有的人可能會說我不需要了解這些設計模式,也可以寫出優秀的面向對象作品。的確是這樣,但是了解這些更容易讓你在面對某種需求時確定出更高效的設計方案,并便于團隊交流。

(二)策略模式 Strategy Pattern

介紹

當幾個類的目的相同,只是表現方式不同時,采用策略模式,運行時動態選擇所要執行的策略。 策略模式主要是用于多個算法之間的互換,比如在購物網站用戶登陸場景中決定登陸后跳轉到普通用戶界面還是商家界面。

實現方式

聲明一個抽象的擁有一個算法方法的基類,通過繼承這個基類的具體實現的類來實現策略模式。從而把那些經常變化的部分,從當前的類中單獨取出來,用接口進行單獨的封裝。封裝好了接口后,通過指定不同的接口實現類進行算法的變化。

角色分析

抽象策略角色(Strategy):策略類,通常由一個接口或者抽象類實現。具體策略角色(ConcreteStrategy):包裝了相關的算法和行為。環境角色(Context):持有一個策略類的引用,最終給客戶端調用。

場景

當需要在不同的情況下使用不同的策略,可以使用策略模式,這樣將變化的算法的實現細節對客戶隱藏。但客戶必須知道所有的策略,才能指定在實例化時使用哪一個類。

例子

用戶登陸后,根據id決定跳轉到具體頁面。

<?php /** * 抽象策略角色 */ class LoginStrategy{ abstract function toLogin(); } /** * 具體策略角色 */ class UserLoginStrategy extends LoginStrategy{ function toLogin(){ echo "go to user"; } } /** * 具體策略角色 */ class SellerLoginStrategy extends LoginStrategy{ function toLogin(){ echo "go to seller"; } } /** * 環境角色 */ class contextStrategy{ function login($id){ if ($condition) { $Login = new UserLoginStrategy; }else{ $Login = new SellerLoginStrategy; } } $Login->toLogin(); } ?>

策略模式經常和工廠模式一起使用,由工廠模式來選擇一個合適的策略。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 枣阳市| 安丘市| 台湾省| 定日县| 年辖:市辖区| 嘉祥县| 丹凤县| 怀来县| 柳林县| 土默特左旗| 合肥市| 嫩江县| 玉溪市| 永年县| 顺义区| 思南县| 保靖县| 新宁县| 凉城县| 海安县| 锡林郭勒盟| 清水河县| 彰化市| 穆棱市| 新丰县| 黑水县| 龙南县| 绿春县| 大埔区| 武山县| 磐石市| 玉山县| 云和县| 文山县| 长垣县| 和顺县| 江西省| 吉首市| 民县| 长沙市| 合川市|