JAVA基础11--行为型模式(观察者模式2,备忘录模式)

来源:互联网 发布:淘宝和京东的采购模式 编辑:程序博客网 时间:2024/06/08 00:18

案例 观察者模式1

public class Subject {protected List<Observer> list = new ArrayList<Observer>();public void registerObserver(Observer obs){list.add(obs);}public void removeObserver(Observer obs){list.add(obs);}//通知所有的观察者更新状态public void notifyAllObservers(){for (Observer obs : list) {obs.update(this);}}}public class ConcreteSubject extends Subject {private int state;public int getState() {return state;}public void setState(int state) {this.state = state;//主题对象(目标对象)值发生了变化,请通知所有的观察者this.notifyAllObservers();} }public interface Observer {void  update(Subject subject);}public class ObserverA implements Observer {private int myState;   //myState需要跟目标对象的state值保持一致!@Overridepublic void update(Subject subject) {myState = ((ConcreteSubject)subject).getState();}public int getMyState() {return myState;}public void setMyState(int myState) {this.myState = myState;}}public class Client {public static void main(String[] args) {//目标对象ConcreteSubject subject = new ConcreteSubject();//创建多个观察者ObserverA  obs1 = new ObserverA();ObserverA  obs2 = new ObserverA();ObserverA  obs3 = new ObserverA();//将这三个观察者添加到subject对象的观察者队伍中subject.registerObserver(obs1);subject.registerObserver(obs2);subject.registerObserver(obs3);//改变subject的状态subject.setState(3000);System.out.println("########################");//我们看看,观察者的状态是不是也发生了变化System.out.println(obs1.getMyState());System.out.println(obs2.getMyState());System.out.println(obs3.getMyState());//改变subject的状态subject.setState(30);System.out.println("########################");//我们看看,观察者的状态是不是也发生了变化System.out.println(obs1.getMyState());System.out.println(obs2.getMyState());System.out.println(obs3.getMyState());}}



案例 观察者模式2

public class ObserverA implements Observer {private int myState;@Overridepublic void update(Observable o, Object arg) {myState = ((ConcreteSubject)o).getState();}public int getMyState() {return myState;}public void setMyState(int myState) {this.myState = myState;}}public class ConcreteSubject extends Observable {private int state; public void set(int s){state = s;  //目标对象的状态发生了改变setChanged();  //表示目标对象已经做了更改notifyObservers(state);  //通知所有的观察者}public int getState() {return state;}public void setState(int state) {this.state = state;}}public class Client {public static void main(String[] args) {//创建目标对象ObserableConcreteSubject subject = new ConcreteSubject();//创建观察者ObserverA obs1 = new ObserverA();ObserverA obs2 = new ObserverA();ObserverA obs3 = new ObserverA();//将上面三个观察者对象添加到目标对象subject的观察者容器中subject.addObserver(obs1);subject.addObserver(obs2);subject.addObserver(obs3);//改变subject对象的状态subject.set(3000);System.out.println("===============状态修改了!");//观察者的状态发生了变化System.out.println(obs1.getMyState());System.out.println(obs2.getMyState());System.out.println(obs3.getMyState());subject.set(600);System.out.println("===============状态修改了!");//观察者的状态发生了变化System.out.println(obs1.getMyState());System.out.println(obs2.getMyState());System.out.println(obs3.getMyState());}}

案例 备忘录模式

public class EmpMemento {private String ename;private int age;private double salary;public EmpMemento(Emp e) {this.ename = e.getEname();this.age = e.getAge();this.salary = e.getSalary();}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}}public class Emp {private String ename;private int age;private double salary;//进行备忘操作,并返回备忘录对象public EmpMemento  memento(){return new EmpMemento(this);}//进行数据恢复,恢复成制定备忘录对象的值public void recovery(EmpMemento mmt){this.ename = mmt.getEname();this.age = mmt.getAge();this.salary = mmt.getSalary();}public Emp(String ename, int age, double salary) {super();this.ename = ename;this.age = age;this.salary = salary;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}}public class CareTaker {private EmpMemento memento;//private List<EmpMemento> list = new ArrayList<EmpMemento>();public EmpMemento getMemento() {return memento;}public void setMemento(EmpMemento memento) {this.memento = memento;}}public class Client {public static void main(String[] args) {CareTaker taker = new CareTaker();Emp emp = new Emp("高淇", 18, 900);System.out.println("第一次打印对象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary());taker.setMemento(emp.memento());   //备忘一次emp.setAge(38);emp.setEname("搞起");emp.setSalary(9000);System.out.println("第二次打印对象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary());emp.recovery(taker.getMemento()); //恢复到备忘录对象保存的状态System.out.println("第三次打印对象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary());}}


0 0
原创粉丝点击