观察者、备忘录模式

实验目的与任务

目的:熟悉UML的使用,熟悉观察者、备忘录模式。

任务:按照实验内容要求,完成使用观察者、备忘录模式实现实验内容。

预习内容

复习课程的内容,熟悉观察者、备忘录模式的使用。

实验内容及要求

  • 观察者模式:

1、商品有名称、价格等信息,价格会有折扣等变动,如果变动后价格会自动通知关注该商品的用户,请结合观察者模式,设计出类图并给出相关代码。

  • 备忘录模式:
    1. Windows系统可能会异常,需要一个备份系统,请结合备忘录模式实现该工具,给出类图和代码。

 

实验结果(可续页)

一:

扫描二维码关注公众号,回复: 6759994 查看本文章

Subject(目标):

package observer;

 

import java.awt.List;

import java.util.ArrayList;

 

/*

 * 目标类,在这里指商品

 */

public class Subject{

    ArrayList<Observer> list = new ArrayList<Observer>();

    public void attach(Observer observer){

    list.add(observer);

       System.out.println("添加了一个观察者!");

    }

    public void detach(Observer observer){

    list.remove(observer);

       System.out.println("删除了一个观察者!");

    }

    void notifyObservers(int price){

    for(Observer observer:list) observer.update(price);

    }

}

 

ConcreteSubject(具体目标):

package observer;

 

import java.awt.List;

import java.util.ArrayList;

 

/*

 * 具体目标,这里是笔

 */

public class ConcreteSubject extends Subject{

    private String name;

    private int price;

    public ConcreteSubject(String name,int price){

       this.name=name;

       this.price=price;

    }

    public void change(int price){

       this.price=price;

       notifyObservers(price);

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public int getPrice() {

       return price;

    }

    public void setPrice(int price) {

       this.price = price;

    }

 

}

 

Observer(观察者):

package observer;

/*

 * 观察者

 */

public interface Observer {

    public void update(int price);

}

 

ConcreteObserver(具体观察者):

package observer;

/*

 * 具体观察者

 */

public class ConcreteObserver implements Observer{

    private int price;

    @Override

    public void update(int price) {

       // TODO Auto-generated method stub

       this.price=price;

       System.out.println("商品价格变动为:"+price);

    }

 

}

Main:

package observer;

 

public class Main {

    public static void main(String args[]){

       Subject pen=new ConcreteSubject("铅笔",10);

        ConcreteObserver client=new ConcreteObserver();

       pen.attach(client);

       pen.notifyObservers(15);

    }

}

类图:

结果:

二:

Originator(原发器):

 

Memento(备忘录):

 

Caretaker(负责人):

 

Main

结果:

类图:

 

 

 

 

 

 

 

 

思考题:

  1. 我和妹妹跟妈妈说:“妈妈,我和妹妹在院子里玩,饭做好了叫我们一声”。请问这是什么模式?请给出类图。

观察者模式.

 

2、假设有两个网站site1、site2,当一个用户进入site1后,使用了session来记录。当用户现在访问site2一段时间,这时用户访问site1就会session失效,请问如何保存session来解决这个问题?

通过备忘录模式解决。用户一开始访问site1时开启备忘录模式,将session信息备份一边,当用户访问site2一段时间后再访问site1,打开备忘录模式,将备份的session信息导出替换。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/yszbrzdd/article/details/93376425
今日推荐