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);
相關文章
相關標籤/搜索