==>
如何实例使请求沿着链在各接受对象中传递,当没被第一个接受对象接受时,会传递给第二个对象,若被第一个对象接受了,则不传递下去:
1.各具体的接受对象采用这样的构造方法:
public CarHandler(Handler handler) { this.handler = handler; }
2.各具体的接受对象实现接口的方法handleRequest()中.在调用时,若被接受,则执行true的内容,若不被接受,则执行false的内容,并继续调用再调用handleRequest()方法.
3.在最后的测试类中,生成具体的handler时,用多层包含的形式.这样,在调用了上一层car的方法后,会调用house的相应方法,最后再调用ResponsibilityHandler的方法.
==>前两个handler是采用了有参数的构造方法,最后一个是采用了为NULL的构造方法
------------------------------ 备忘录模式(Memento) -------------------------------
(1)备忘录模式属于行为型模式,其意图是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将对象恢复到原先保存的状态。
(2)实例如下:
有一个对象Employee.除了属性外,还需要一个保存,还原状态的方法.
有一个对象Memento,用来记录Employee每一个时刻的状态,
CareTaker,用来保存,拿回Memento.需要一个保存,还原状态的方法.->需要一个指针,一个容器.
package memento; public class Memento{ String name; int age; public Memento(String name,int age){ this.name = name; this.age = age; } } Employee模式: package memento; public class Employee{ private String name; private int age; public Employee(String aName,int aAge){ name = aName; age = aAge; } public void setName(String aName){ name = aName; } public void setAge(int aAge){ age = aAge; } public Memento saveMemento(){ return new Memento(name,age); } public void restoreMemento(Memento memento){ age = memento.age; name = memento.name; } public int getAge(){ return age; } public String getName(){ return name; } } CareTaker代码: package memento; import java.util.Vector; public class CareTaker{ private Vector v; private int current; public CareTaker(){ current = -1; v = new Vector(); } public void setMemento(Memento mem){ current ++; v.add(mem); } public Memento getMemento(){ if(current>0){ current --; return(Memento) v.get(current); } return null; } } Client代码: package memento; public class Client{ public static void show(Employee e){ System.out.println("-----------------------------------"); System.out.println("Name:"+e.getName()); System.out.println("Age:" + e.getAge()); System.out.println("-----------------------------------"); } public static void main(String[] args){ Employee e = new Employee("lili",25); CareTaker ct = new CareTaker(); show(e); ct.setMemento(e.saveMemento()); e.setName("litianli"); show(e); ct.setMemento(e.saveMemento()); e.setAge(45); show(e); ct.setMemento(e.saveMemento()); //restore e.restoreMemento(ct.getMemento()); show(e); e.restoreMemento(ct.getMemento()); show(e); } } |
相关文章: