实验一 设计模式综合应用(一)附源码+UML图

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注:班里的可以向我要工程文件

实验一设计模式综合应用(一)

一、实验目的:

熟练掌握Java设计模式中的命令模式和观察者模式,并培养学生将两者综合应用到具体软件项目中的能力。

二、实验内容:

制作如图1所示GUI界面,需求如下:

1. 鼠标左键点击界面时,在鼠标所在位置填充一个直径为20像素的圆,

并在界面上方的标签上显示“新增圆点位于:(x,y)”;

2. 鼠标右键点击时,则实现undo操作,将最后填充的圆点从界面中删除,

并在界面上方的标签上显示“删除圆点位于:(x,y)”;

3. 界面下方的标签随时显示“鼠标位于:(x,y)”;

图1 GUI界面

三、实验要求:

1. 绘制和撤销圆点使用命令模式;

2. 两个标签内容的变更使用观察者模式;

3. 在代码实现之前,进行UML类图设计;

4. 根据UML类图,在eclipse中编程实现程序的功能。

四、实验学时:2+2学时(课外2个学时)

五、提示:

1.设计一个Circle类,该类对象用来记录某个填充圆的信息;

2. 每填充一个圆点,就实例化一个Circle类对象,并将其放置到具体命令对

象关联的List对象中,用来作为undo操作的依据;

3. 填充圆可以使用Graphics的fillOval方法;

4. 删除圆可以先将Graphics对象的颜色设置为画布的背景色,再使用

Graphics的fillRect方法;

5. 标签显示内容的需求不用观察者模式就可以轻松实现,但要求使用观察者

模式进行设计;

5. 实验完成后,将UML文件和程序的工程文件打包,命名为“实验一.rar”,

并上传至ftp://10.10.3.72。

六UML图

七源代码

1.

package lsu.egg.sy1;

public class Circle {

private int x;

private int y;

Circle(int x, int y) {

this.x = x;

this.y = y;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

}

2.

package lsu.egg.sy1; import javax.swing.JPanel; public interface Command {

public void excute(JPanel jpanel, Circle circle);

public void undo(JPanel jpanel);

}

3.

package lsu.egg.sy1;

import java.util.ArrayList;

import javax.swing.JPanel;

public class ConcreteCommand implements Command {

private Receiver receiver;

private ArrayList arraylist;

private ConcreteOfInvoker concreteofinvoker;

ConcreteCommand(Receiver receiver, ConcreteOfInvoker concreteofinvoker) {

this.receiver = receiver;

this.arraylist = new ArrayList();

this.concreteofinvoker = concreteofinvoker;

}

@Override

public void excute(JPanel jpanel, Circle circle) {

receiver.addSpot(jpanel, circle);

arraylist.add(circle);

}

@Override

public void undo(JPanel jpanel) {

Circle circle;

if(arraylist.size()>=1)

{

circle = arraylist.get(arraylist.size() - 1);

receiver.deleteSpotr(jpanel, circle);

arraylist.remove(arraylist.size() - 1);

int n = 2;

concreteofinvoker.notifyObservers(n, circle.getX(), circle.getY());

}

}

}

4.package lsu.egg.sy1;

import javax.swing.JLabel;

@SuppressWarnings("serial")

相关文档
最新文档