Observer, the memo mode

Purpose and task

Objective: familiar with the UML, familiar with the observer, the memo mode.

Tasks: in accordance with the requirements of the experiment content, complete use of the observer, the memo mode to achieve experimental content.

Content preview

Review the contents of the course, familiar with the viewer, using the Memo mode.

Experiment contents and requirements

  • Observer Pattern:

1, commodities names, prices and other information, such as price discounts will change, the price will automatically notify the user of the goods concerned if changes, please combined with the observer pattern, design a class diagram and give the relevant code.

  • Memo mode:
    1. Windows system abnormalities may need a backup system, combined with the tools to achieve the memo mode, gives class diagrams and code.

 

The results (available Continued)

One:

Subject (target):

package observer;

 

import java.awt.List;

import java.util.ArrayList;

 

/*

 * Target class, in this case goods

 */

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信息导出替换。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/yszbrzdd/article/details/93376425