设计模式 php语言实践-7 过滤器模式

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。

以下是一个实现从一个人员列表中检索出名字中带有张字的人员的代码例子

<!DOCTYPE html>
<html >
<head>
</head>
<body>
  <div class="content">
      <div>
                <?php 
                interface Criteria {
                        public  function  meetCriteria($personsm);
                 }
                 class ZhangCriteria implements Criteria
                 {
                        public  function  meetCriteria($persons){
                                $arr=array();
                                for ($i=0; $i <count($persons) ; $i++) { 
                                        $person=$persons[$i];
                                        $find = strstr($person->getName(), '张');
                                        if($find!=false)
                                        array_push($arr,$person);
                                }
                                return $arr;
                        }
                 }
                class Person
                {
                        private $_name="";
                        public function __construct($name)
                        {
                                $this->_name = $name;
                        }
                        public function getName()
                        {
                                return $this->_name;
                        }
                }
                $arr = array();
                array_push($arr,new Person('张三'));
                array_push($arr,new Person('张三丰'));
                array_push($arr,new Person('张三疯'));
                array_push($arr,new Person('李四'));
                $NameZhang=new ZhangCriteria();
                print_r($p2);print_r('<br/>');
                $ret=$NameZhang->meetCriteria($arr);
                print_r($ret);
                ?>
      </div>
    </div> 
</body>
</html>

输出结果

Array ( [0] => Person Object ( [_name:Person:private] => 张三 ) [1] => Person Object ( [_name:Person:private] => 张三丰 ) [2] => Person Object ( [_name:Person:private] => 张三疯 ) )