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

      

  • 相关阅读:
    [硬件驱动_蓝牙]蓝牙Bluez的编程实现
    二分查找
    LeetCode-35.Search Insert Position
    LeetCode-34.Find First and Last Position of Element in Sorted Array
    LeetCode-704.Binary Search
    剑指offer-最小的k个数
    树的各种遍历
    LeetCode-912.Sort an Array
    排序
    LeetCode-209.Minimum Size Subarray Sum
  • 原文地址:https://www.cnblogs.com/feiyujinghong/p/6393208.html
Copyright © 2020-2023  润新知