2018-1-8-PHP设计模式【访问者模式】

layout title date author desc in_head
post
PHP设计模式之访问者模式
2018-01-08 09:30:02 +0800
南丞
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

访问者模式

people_name = "男人";
    }
    public function Accept($Visitor){
        $Visitor->VManRelease($this);
    }
}
/**
 * 创建一个 女性
 */
class VWoman extends Entity{
    function __construct(){
        $this->people_name = "女人";
    }
    public function Accept($Visitor){
        $Visitor->VWomanRelease($this);
    }
}
/**
 * 抽象出 行为类
 */
abstract class Behavior{
    protected $bh_name;
    /**
     * 行为逻辑 - 男性
     * $ResNew 对应实体的实例
     */
    public abstract function VManRelease($ResNew);
    /**
     * 行为逻辑 - 女性
     * $ResNew 对应实体的实例
     */
    public abstract function VWomanRelease($ResNew);
}
/**
 * 创建一个 吃东西行为
 */
class Eat extends Behavior{
    public function __construct(){
        $this->bh_name = "吃东西";
    }
    public  function VManRelease($VMan){
        echo "{$VMan->people_name} : {$this->bh_name}时,都很粗鲁。
"; } public function VWomanRelease($VMan){ echo "{$VMan->people_name} : {$this->bh_name}时,都很斯文。
"; } } /** * 创建一个 运动行为 */ class Motion extends Behavior{ public function __construct(){ $this->bh_name = "运动"; } public function VManRelease($VMan){ echo "{$VMan->people_name} : {$this->bh_name}时,大汗淋漓。
"; } public function VWomanRelease($VMan){ echo "{$VMan->people_name} : {$this->bh_name}时,休闲漫步。
"; } } /** * 设计一个 结构对象类,用于聚合实体信息 */ class Object{ private $entity = array(); // 存储实体对象 # 新增实体 public function Add($entity){ array_push($this->entity, $entity); } # 移除实体 public function Remove($entity){ foreach($this->entity as $k=>$v) { if($v==$entity) { unset($this->entity[$k]);break; } } } # 查看对应行为描述 public function Display($Visitor){ foreach ($this->entity as $v) { $v->Accept($Visitor); } } } # 先聚合实体 $os = new Object(); $os->Add(new VMan()); $os->Add(new VWoman()); # 查看吃东西的行为 $os->Display(new Eat()); # 查看运动的行为 $os->Display(new Motion());

你可能感兴趣的:(设计模式,python,java,php,django)