php面向对象之策略模式,PHP面向对象编程设计模式(一)策略模式

(一)什么是面向对象编程

面向对象(OO)的定义是什么,在面向对象的入门课程C++(或者JAVA)中,封装数据和方法好像是面向对象最重要的一个特点,当然还有基于继承实现的多态和重载。其实每一种OOP语言,由于彼此功能上的差异性,这些特点只能适用于某一种特定的任务。

比较公认的一点是,开发面向对象的软件不仅要注重语言和语法特性,设计思想也是尤其重要的一点。相对于面向过程的语言,面向对象的语言更容易有优秀的设计思想(参考社区中话题),由于面向对象的各种特性,使其更容易实现出较为复杂、考虑情况更为多样的的程序。

同样,在PHP开发者中,比较常用的面向对象的设计有几种设计模式,今天我们来全面地了解一下这些模式,有的人可能会说我不需要了解这些设计模式,也可以写出优秀的面向对象作品。的确是这样,但是了解这些更容易让你在面对某种需求时确定出更高效的设计方案,并便于团队交流。

(二)策略模式 Strategy Pattern

介绍

当几个类的目的相同,只是表现方式不同时,采用策略模式,运行时动态选择所要执行的策略。

策略模式主要是用于多个算法之间的互换,比如在购物网站用户登陆场景中决定登陆后跳转到普通用户界面还是商家界面。

实现方式

声明一个抽象的拥有一个算法方法的基类,通过继承这个基类的具体实现的类来实现策略模式。从而把那些经常变化的部分,从当前的类中单独取出来,用接口进行单独的封装。封装好了接口后,通过指定不同的接口实现类进行算法的变化。

角色分析

抽象策略角色(Strategy):策略类,通常由一个接口或者抽象类实现。

具体策略角色(ConcreteStrategy):包装了相关的算法和行为。

环境角色(Context):持有一个策略类的引用,最终给客户端调用。

场景

当需要在不同的情况下使用不同的策略,可以使用策略模式,这样将变化的算法的实现细节对客户隐藏。但客户必须知道所有的策略,才能指定在实例化时使用哪一个类。

例子

用户登陆后,根据id决定跳转到具体页面。

/** * 抽象策略角色 */

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();

}

?>

策略模式经常和工厂模式一起使用,由工厂模式来选择一个合适的策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值