面向对象(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(); } ?>策略模式经常和工厂模式一起使用,由工厂模式来选择一个合适的策略。
新闻热点
疑难解答
图片精选