面向對象(OO)的定義是什么,在面向對象的入門課程C++(或者JAVA)中,封裝數據和方法好像是面向對象最重要的一個特點,當然還有基于繼承實現的多態和重載。其實每一種OOP語言,由于彼此功能上的差異性,這些特點只能適用于某一種特定的任務。 比較公認的一點是,開發面向對象的軟件不僅要注重語言和語法特性,設計思想也是尤其重要的一點。相對于面向過程的語言,面向對象的語言更容易有優秀的設計思想(參考社區中話題),由于面向對象的各種特性,使其更容易實現出較為復雜、考慮情況更為多樣的的程序。 同樣,在php開發者中,比較常用的面向對象的設計有幾種設計模式,今天我們來全面地了解一下這些模式,有的人可能會說我不需要了解這些設計模式,也可以寫出優秀的面向對象作品。的確是這樣,但是了解這些更容易讓你在面對某種需求時確定出更高效的設計方案,并便于團隊交流。
當幾個類的目的相同,只是表現方式不同時,采用策略模式,運行時動態選擇所要執行的策略。 策略模式主要是用于多個算法之間的互換,比如在購物網站用戶登陸場景中決定登陸后跳轉到普通用戶界面還是商家界面。
聲明一個抽象的擁有一個算法方法的基類,通過繼承這個基類的具體實現的類來實現策略模式。從而把那些經常變化的部分,從當前的類中單獨取出來,用接口進行單獨的封裝。封裝好了接口后,通過指定不同的接口實現類進行算法的變化。
當需要在不同的情況下使用不同的策略,可以使用策略模式,這樣將變化的算法的實現細節對客戶隱藏。但客戶必須知道所有的策略,才能指定在實例化時使用哪一個類。
用戶登陸后,根據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(); } ?>策略模式經常和工廠模式一起使用,由工廠模式來選擇一個合適的策略。
新聞熱點
疑難解答
圖片精選