PHP设计模式之策略模式
导读
在开发PHP的项目时我们经常会先考虑我们使用什么设计模式,是程序执行更顺利,接下来免费资源网就为大家介绍一下策略模式原理与实现方法,有需要的小伙伴可以参考一下:
1、定义:
将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。
2、应用场景:
(1)、多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。 (2)、需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。 (3)、对客户隐藏具体策略(算法)的实现细节,彼此完全独立。 (4)、客户端必须知道所有的策略类,并自行决定使用哪一个策略类,策略模式只适用于客户端知道所有的算法或行为的情况。 (5)、策略模式造成很多的策略类,每个具体策略类都会产生一个新类。
3、实例:
//定义接口 interface IStrategy { function filter($record); } //实现接口方式1 class FindAfterStrategy implements IStrategy { private $_name; public function __construct($name) { $this->_name = $name; } public function filter($record) { return strcmp ( $this->_name, $record ) <= 0; } } //实现接口方式1 class RandomStrategy implements IStrategy { public function filter($record) { return rand ( 0, 1 ) >= 0.5; } } //主类 class UserList { private $_list = array (); public function __construct($names) { if ($names != null) { foreach ( $names as $name ) { $this->_list [] = $name; } } } public function add($name) { $this->_list [] = $name; } public function find($filter) { $recs = array (); foreach ( $this->_list as $user ) { if ($filter->filter ( $user )) $recs [] = $user; } return $recs; } } $ul = new UserList ( array ( "Andy", "Jack", "Lori", "Megan" ) ); $f1 = $ul->find ( new FindAfterStrategy ( "J" ) ); print_r ( $f1 ); $f2 = $ul->find ( new RandomStrategy () ); print_r ( $f2 );
4、小结:
(1)、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;
(2)、针对接口编程,不针对实现编程;
(3)、多用组合,少用继承。
评论(0)