zoukankan      html  css  js  c++  java
  • 访问者模式统计下属用户银两和金币

    功能:

    统计一组用户的银两和金币.

    一.用户接口和实现

    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);
        }
    }
    

      

    二.访问者接口和实现

    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}";
        }
    }
    

      

    三.调用:

    // 模拟数据库读取一批用户
    $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;
  • 相关阅读:
    LOG4J介绍
    基于AspectJ的XML方式进行AOP开发
    tsdb import 相关
    xming + putty remote GUI
    html5 编辑
    swift container server 莫名stuck
    rsyslog trouble shooting
    文件处理 字符串处理
    list去掉重复元素
    找到字符串中最长的回文
  • 原文地址:https://www.cnblogs.com/itfenqing/p/8735086.html
Copyright © 2011-2022 走看看