Java设计模式这备忘录模式

备忘录模式是一种行为模式,用来记录的中间状态,在需要时使对象恢复到某个中间状态。

我们在写代码时,发现代码结构不理想或者出错,恢复到过去的某种状态就是这种情况,代码如下:

package com.zhang.memento;

import java.util.ArrayList;
import java.util.List;

// 备忘录类
class Memento {
	private List mem = new ArrayList();

	public void save(String str) {
		mem.add(str);
	}

	public void display() {
		for (int i = 0; i < mem.size(); i++) {
			System.out.println("========= " + i + " =========");
		}
	}

	public String recover(int index) {
		if (index >= mem.size())
			return null;
		return mem.get(index);
	}
	
	public void clear() {
		mem.clear();
	}
}

// 程序类
class MyProgram {
	private StringBuffer code;

	public MyProgram() {
		code = new StringBuffer();
	}

	public void addCode(String code) {
		this.code.append(code);
	}

	public void setCode(String code) {
		this.code = new StringBuffer(code);
	}

	public String getCode() {
		return code.toString();
	}

	public void display() {
		System.out.println(getCode());
	}
}

public class MementoPattern {

	public static void main(String[] args) {
		MyProgram p = new MyProgram();
		Memento m = new Memento();
		
		for(int i = 0; i < 10; i ++) {
			p.addCode("code: " + i + "\n");
			// 每加一行代码都记录一下状态
			m.save(p.getCode());
		}
		
		p.display();
		
		// 恢复以前的状态
		p.setCode(m.recover(5));
		p.display();
		
	}

}

实现很简单,把备忘录功能直接写在程序类内部也可以,但这样就使“程序类”与“备忘录类”的功能混合在一起。只所以分开实现是为了最大程序的“解耦",可以看到这种实现方式下,程序类与备忘录之间实现上并没有任何关系。

你可能感兴趣的:(Java,备忘录模式,Java语言)