訪問者模式統計下屬用戶銀兩和金幣

功能:數據庫

統計一組用戶的銀兩和金幣.ui

 

一.用戶接口和實現this

interface UserInterface
{
    public function accept(Visitor $visitor);
}

  

class User implements UserInterface
{
    private $uid;
    private $silver;
    private $money;

    public function __construct($uid, $silver, $money)
    {
        $this->uid      = $uid;
        $this->silver   = $silver;
        $this->money    = $money;
    }

    /**
     * @return mixed
     */
    public function getUid()
    {
        return $this->uid;
    }

    /**
     * @return mixed
     */
    public function getSilver()
    {
        return $this->silver;
    }

    /**
     * @return mixed
     */
    public function getMoney()
    {
        return $this->money;
    }

    public function accept(Visitor $visitor)
    {
        $visitor->visitUser($this);
    }
}

  

二.訪問者接口和實現spa

interface VisitorInterface
{
    public function visitUser(User $user);
}

  

class Visitor implements VisitorInterface
{
    public $silverTotal  = 0;
    public $moneyLevel  = 0;

    public function visitUser(User $user)
    {
        $this->silverTotal  += $user->getSilver();
        $this->moneyLevel   += $user->getMoney();
    }

    public function __toString()
    {
        return "總計下屬用戶:銀兩合計:{$this->silverTotal};金幣合計:{$this->moneyLevel}";
    }
}

  

三.調用:blog

// 模擬數據庫讀取一批用戶
$user = new User(1, 10, 200);
$list = [];
$list[] = clone $user;
$list[] = clone $user;
$list[] = clone $user;
$list[] = clone $user;
$list[] = clone $user;

$visitor = new Visitor();

foreach ($list as $user) {
    $user->accept($visitor);
}

echo $visitor;
相關文章
相關標籤/搜索