php策略模式的研究

<?php

abstract class Moshi{

    private $num;
    public $price;
    const Ted=1;
    const Sed=2;

    public function __construct($num,$price)
    {
        $this->num = $num;
        $this->price = $price;
    }

    public function cost(){
        if($this->price == self::Ted) return 30;
        elseif($this->price == self::Sed) return 5*$this->num;
        else { $this->price == self::Ted; return 35;}
    }

    public function ccc(){
        if($this->price == self::Ted) return 'a';
        elseif($this->price == self::Sed) return 'b';
        else$this->price == self::Ted; return 35;}
    }

}

class Aa extends Moshi{}
class Bb extends Moshi{}
var_dump(Moshi::Ted);//类中常量的调用
$a=new Aa(5,Moshi::Ted);
print "{$a->cost()}--{$a->ccc()}\n";
$b=new Aa(3,Moshi::Sed);
print "{$b->cost()}--{$b->ccc()}\n";

$c=new Aa(5,4);
print "{$c->cost()}--{$c->ccc()}--{$c->price}\n";

 

 

 

 

<?php

abstract class Moshi2{

    private $num;
    private $price;

    public function __construct($num,Sget $sget)
    {
        $this->num = $num;
        $this->price = $sget;
    }

    public function cost(){
        return $this->price->cost($this);

    }

    public function ccc(){
        return $this->price->charge();
    }

    public function gets(){
        return $this->num;
    }
}

class Aa extends Moshi2{}
class Bb extends Moshi2{}

abstract class Sget{
    abstract function cost(Moshi2 $moshi2);
    abstract function charge();
}

class Ee extends Sget{
    function cost(Moshi2 $moshi2){
        return $moshi2->gets() * 5;
    }
    function charge(){
        return 'a';
    }
}

class Ff extends Sget{
    function cost(Moshi2 $moshi2){
        return 30;
    }
    function charge(){
        return 'b';
    }
}


$bb    = new Aa(4,new Ee());
print "{$bb->cost()}\n";

$les[] = new Aa(4,new Ee());
$les[] = new Bb(4,new Ff());
var_dump($les);
foreach($les as $val){
    print "{$val->cost()}--";
    print "{$val->ccc()}\n";

}

 

posted @ 2014-03-12 19:56  jami918  阅读(154)  评论(0编辑  收藏  举报