php教程:php设计模式介绍之规范模式(3)_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

php教程:php设计模式介绍之规范模式(3)

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:模式规范教程介绍
黑客防线网安网讯:  参数化规范    TripRequiredTemperatureSpecification必须很熟悉Trip对象的结构,并且钻研Trip对象的三个public(公开)属性。这并不是很糟糕的。事实上,在过去使用规范模式的过程...
  参数化规范
  
  TripRequiredTemperatureSpecification必须很熟悉Trip对象的结构并且钻研Trip对象的三个public(公开)属性这并不是很糟糕的事实上在过去使用规范模式的过程中,我发现不少规范得益于我对特有参数对象的详细了解。然而,这种紧密的联系对规范的重用带来了很大的麻烦。
  
  幸运的是,各种不同的规范模式已经开始着手从事代码重用问题的研究。特别值得提出的是,参数化规范模式通过构造器(constructor)来接收参数,这个参数主要用于确定isSatisfiedBy()函数的进化标准。
  
  现在让我们看看这个参数化规范,它使用了相同旅行站点的对象。假定你要搜索出一个目的地的列表,并且列表显示出满足“足够温暖”标准的城市。
  
  使用原来的TripRequiredTemperatureSpecification,你不得不为每个评估创建一个Trip对象。这是因为(在这个明确的问题上)旅行者(Traveler)和旅行日期(Date)是不变的,仅仅只有目的地因为你不断的重述可行目的地列表而不断变化。
  
  使用参数化规范,你记住了旅行者首选的温度和旅行日期,并且你只要通过传递一个变量到方法isSatisfiedBy()就可以比较目的地。
  
  参数化规范对象DestinationRequiredTemperatureSpecification的构造函数需要一个旅行者(Traveler)和一个日期(Date)来实例化这个规范。
  
  classDestinationRequiredTemperatureSpecification{
  
  protected$temp;
  
  protected$month;
  
  publicfunction__construct($traveler,$date){
  
  $this->temp=$traveler->min_temp;
  
  $this->month=date(‘m’,$date);
  
  }
  
  }
  
  由于存储在实例化变量中的数据(温度和日期)的一致性,DestinationRequiredTemperatureSpecification的方法isSatisfiedBy()把目的地(Destination)做为一个输入参数来评估。
  
  classDestinationRequiredTemperatureSpecification{
  
  //...
  
  functionisSatisfiedBy($destination){
  
  return
  
  ($destination->getAvgTempByMonth($this->month)>=$this->temp);
  
  }
  
  }
  
  现在你可以写一个测试实例来过滤目的地列表。
  
  classDestinationSpecificationTestCaseextendsUnitTestCase{
  
  //similarsetuptoTripSpecificationTestCase
  
  functionTestFindingDestinations(){
  
  $this->assertEqual(2,count($this->destinations));
  
  $valid_destinations=array();
  
  $vicki=newTraveler;
  
  $vicki->min_temp=70;
  
  $travel_date=mktime(0,0,0,2,11,2005);
  
  $warm_enough=newDestinationRequiredTemperatureSpecification(
  
  vicki,$travel_date);
  
  foreach($this->destinationsas$dest){
  
  if($warm_enough->isSatisfiedBy($dest)){
  
  $valid_destinations[]=$dest;
  
  }
  
  }
  
  $this->assertEqual(1,count($valid_destinations));
  
  $this->assertIdentical(
  
  $this->destinations[‘Cancun’],
  
  $valid_destinations[0]);
  
  }
  
  }
  
  通过上面的例子,你可以看到参数化规范能给你带来更多额外的自由和灵活性。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17412-1.html
网站维护教程更新时间:2012-09-21 05:18:25  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer