php教程:php设计模式介绍之伪对象模式

  • 来源: 未知 作者: 老苏   2011-07-18/10:21
  • }

    那个类中add()函数先累加值到$total变量中,再交由total()函数返回。一个简单的累加也能够以下里如许(下里的代码被编写为一个函数,但它也能够写成一个类)。

    本章与其他章差别,由于真对象是一个测试形式而不是设计形式。那相似于一个附加的章节,但对它的利用确切很值得你纳进到编码历程中。另中一个差别是我们不再存眷那个形式若何编码之类的根底题目,而是夸大若何正在SimpleTest中利用真对象。

    return$this->total;

    functionadd($item){

    }

    $this->total+=$item;

    functioncalc_tax(&$amount,$rate=0.07){

    若何分隔并测试一个与其他对象和资本有闭的代码段?又若何再建立一个或多个对象、法式来考证你的代码能正常运转?

    本章先举一个十分简单的例子来树模SimpleTest下真对象的根本机造。然后向你演示若何利用真对象帮闲重构已有代码与若何测试新的办理圆案。

    里向对象的编程之所以富厚多彩,部门是果为对象间的彼此联系与感化。一个单一的对象就可以封拆一个复纯的子系统,使那些很复纯的操作可以或许经过一些圆式的挪用而简化。(无所不正在的数据库毗连就是如许的一个对象真例。)

    var$total=0;

    办理圆案

    }

    《PHP设计形式先容》第六章真对象形式

    }

    真对象是对象正在测试中的一个替换品,用它测试代码越收简洁。例如,替换一个真真的数据毗连——那个真真的数据毗连果为一些缘由此不克不及现真毗连——你便可以建立一个真对象来摹拟。那意味着真对象需要精确地回应代码中所挪用的沟通的利用法式接心。

    $this->assertEqual(6,$sum->total());

    returnround($amount->total()$rate,2);

    $sum=&newAccumulator;

    让我们建立一个真对象来替换一个简单的名为Accumulator的类,那是一个乞降的类。以下是最初的Accumulator类:

    }

    当用situ(或正在一个仿真的法式情况中)测试一个对象价格不菲或坚苦重重时,便可用真对象来摹拟那个行动。真对象有同真真对象一样的接心,但却能供给预编译响应,能跟踪圆式挪用,并考证挪用顺序。

    真对象是测试的“迥殊气力”。他们被奥秘练习,渗进进目的代码,摹拟并监督通讯体例,回报后果。真对象有助于查找和消弭法式缝隙并能撑持更多正常调试情况下的“防伤害”操作。

    第一个函数calc_total()用一个累加的行动求一系列值的和。下里是简单的测试:

    真对象形式是另中一种测试形式ServerStub的扩大。ServerStub形式替换一个资本并返回其圆式所挪用的响应值。当其介进指定顺序的圆式的挪用时Sephp教程:php设计模式介绍之伪对象模式rverStub就成了真对象。

    题目

    foreach($itemsas$item){

    $sum->add($item);

    classAccumulator{

    }

    为了利用真对象,具有代表性的做法是你亲身写一个新类(其真不要求立时做)。枯幸的是,SimpleTest有一种轻易的脚腕来真现Mock::generate()圆式。

    注:TheServerStub

    }

    其并不是是一个设计形式

    样本代码

    functiontotal(){

    functiontestCalcTotal(){

    上文:《PHP设计形式先容》第五章注册形式

    但是常常有如许的环境,对象间的交互性是如斯复纯以致于我们不能不里对相似“先有鸡仍是先有蛋”如许伤脑子的题目:若何建立并测试如许一个对象,他要末依靠于良多已建立的对象,要末依靠于其他一些难以意想到的环境,如全部数据库的建立和测试。

    }

    让我们存眷第两个例子。假定真现一个真真的累加行动的价格很年夜。那末用一个简单的对象来替换它并回应相干代码就是很好的做法了。利用SimpleTest,你可以用以下代码建立一个真累加行动:

    calc_total(array(1,2,3),$sum);


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多