zoukankan      html  css  js  c++  java
  • PHP设计模式之备忘录模式

    <?php
    //备忘录模式定义:备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
    // 角色:        
    
    //1.发起人:负责创建一个备忘录,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。发起人能够依据须要决定备忘录存储自己的哪些内部状态。
    
    //2.备忘录:负责存储发起人对象的内部状态,并能够防止发起人以外的其它对象訪问备忘录。备忘录有两个接口:管理者仅仅能看到备忘录的窄接口,他仅仅能将备忘录传递给其它对象。发起人却可看到备忘录的宽接口。同意它訪问返回到先前状态所须要的全部数据。
    
    //3.管理者:负责存取备忘录,不能对内容进行訪问或者操作。
    
    /**
     * 发起人类
     */
    class Sponsor{
    	public $time = 36000;
    	public $title = "奋斗者";
    	public $money = 0;
    
    	public function subTime(){
    		$this->time --;
    	}
    
    	public function addMoney(){
    		$this->money += 1000;
    	}
    
    	public function changeTitle($title){
    		$this->title = $title;
    	}
    	/**
    	 * 备份当前的基础数据属性
    	 * @dateTime 2017-02-13
    	 */
    	public function backup(){
    		return new Backup($this->time,$this->money,$this->title);
    	}
    	/**
    	 * 数据还原
    	 * @dateTime 2017-02-13
    	 */
    	public function reback(Backup $backup){
    		$this->time  = $backup->time;
    		$this->title = $backup->title;
    		$this->money = $backup->money;
    	}
    }
    /**
     * 存储类
     */
    class Backup{
    	public $time;
    	public $title;
    	public $money;
    
    	public function __construct($time,$money,$title){
    		$this->time  = $time;
    		$this->title = $title;
    		$this->money = $money;
    	}
    }
    /**
     * 管理者类
     */
    class Manager{
    	public $data;
    }
    
    
    //客户端应用
    $Sponsor = new Sponsor();
    //备份初始状态
    $Manager = new Manager();
    $Manager->data = $Sponsor -> backup();
    while($Sponsor->time > 0){
    	$Sponsor -> addMoney();
    	$Sponsor -> subTime();
    	if($Sponsor->money >= 1000000)
    		$Sponsor -> changeTitle("骄傲者");
    	if($Sponsor->money >= 10000000)
    		$Sponsor -> changeTitle("能力者");
    	if($Sponsor->money >= 100000000)
    		$Sponsor -> changeTitle("成功者");
    }
    var_dump($Sponsor);
    //还原初始状态
    $Sponsor->reback($Manager->data);
    var_dump($Sponsor);
    

      

  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/feiyujinghong/p/6393208.html
Copyright © 2011-2022 走看看