大连海事大学软件设计与体系结构
课程实验报告
(2016-2017学年第二学期)
实验四设计模式应用
班级:软件工程一班
学号:**********
*名:***
指导教师:**
成绩:
2016年1月2日
目录
1实验目的 (3)
2实验内容 (3)
3实验要求 (4)
4实验步骤 (4)
5总结与体会 (4)
5.1实验中出现的问题及其解决方案 (4)
5.2总结 (5)
5.3体会............................................................................................... 错误!未定义书签。
1实验目的
1.1利用Observer、单件等设计模式开发实现一个小的系统。
1.2通过常用的设计模式的实例实验,熟悉设计模式特点及应用条件,掌握基于设计模式的
软件系统的设计与开发应用。
2实验内容
2.1完成一个了一个可以绘图并进行移动的绘图程序
该程序分成分成8部分来写分别是:ShapeMgr.java MyCircle.java MyLine.java MyLocation.java MyRectangle.java MyShape.java IShape.java Painting.java
2.2ShapeMgr.java
这部分代码是负责几种管理图形的代码,将代码存在一个ArrayList 集合中,方便在移动的时候进行几种的管理
2.3MyCircle.java
这部分是关于绘制圆形的,里面有filloval()方法——这是用于绘图的方法,还有一个inside()方法,这是关于移动的函数,用于判断是否可以进行移动
2.4MyLine.java
与上一个类是一样的,用于绘制直线
2.5MyRectangle.java
与上一个类是一样的,用于绘制矩形
2.6MyLocation.java
这是一个负责进行初始地址管理的类,因为每次移动都需要变更地址,而图形的相对属性是不变的。
就像是矩形开始点到终止点的距离,是不变的。
确定了初始的地点,依据现有图形的一些属性,就可以重新绘制出移动后的另一个图形。
每次只要是关于初始地点的X、Y 都必须通过这个类来获取和改变,所以里面有get、set函数等。
这个类是图形移动的关键,所以设计的时候花费的时间比较多。
2.7MyShape.java
这个类继承了接口IShape 接口,实现了它里面的方法,并且其他的类继承了这个类里面的方法,并进行一些改变。
这个类的作用主要是最坐标进行处理的,因为在移动的时候,只要是针对初始的X,Y 的值进行改变,然后在根据之前的一些属性进行重新绘制图形。
2.8IShape.java
这是一个父父接口,用于管理最常用的几个方法
MyLocation getMylocation();
void setMyLocation(MyLocation location);
这个方法是与MyShape类中的一个方法,用于获取之前的X,Y 的地址,然后通过计算式进行改变地址的值,获取新的地址,然后在重新绘制出新的图形。
Int area();
这个方法的用处不大,只是可以算出所绘制出图形的大小而已。
void drawing(Graphics g);
void moveTo(MyLocation location);
Boolean insideMe(int x,int y);
这个函数里面有一个判断条件,通过判断鼠标是在图形的内部,而判断是否进行移
动。
2.9Painting.java
这是主函数,首先是制作一个图形界面出来,通过继承JFrame 类来实现的。
因为实现的功能比较的简单,所以没有是由JMenuBar 来设置了,只是添加了4个按钮,分别是:移动、圆形、直线、矩形
通过addMouseListener(),addMouseMotionListener()对鼠标进行监听,包括获取鼠标的点和鼠标移动的坐标的动态的点,然后在通过setLocation()对图形初始的点进行重新的设置,然后在重绘出来,之后鼠标在移动的话,即将现在这个初始点进行重新的设置,在绘制出新的图形,一直重复,知道鼠标没有进行相关的操作。
3实验要求
(1)深入复习教材中介绍的各种设计模式。
(2)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。
4实验步骤
4.1采用单件设计模式设计抽象工厂类,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。
4.2采用Composite设计模式设计直线、符号、字符串、方框及复合图形,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。
4.3 采用Iterator设计模式访问复合图形中的各个子图形,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。
4.4 采用Observer设计模式实现图形的拖动、放大缩小,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。
5总结与体会
5.1 实验中出现的问题及其解决方案
试验中遇到了很多的问题。
首先绘图是很简单的,只需要一个方法就可以实现,但是对图形的管理,不仅仅是一个ArrayList 这个简单了,一个集中管理图形工具,ShapeMgr 就是这样一个职责的类。
刚开始的时候怎么也想不出怎么样对图形进行管理,后来你想到get,set 方法,或许这个方法是有效的,所有通过一个索引对集合中的图形进行管理,如果判断出是鼠标在这个图形中的话,那么就找出这个图形,
并根据这个图形进行移动等动作,然后在存到集合中去,就这样反反复复的,各种操作就行了。
5.2 总结
这个程序对我们来说还是有一点难度的,因为尽管实现了一部分的功能,但是没有
完成老师要求的全部的功能。
使用设计模式来进行编程是一个很难得事情,在我看
来。
所以,我会继续的学习。
程序代码:
1、ShapeMgr.java
2、MyCircle.java
3、MyLine.java
4、MyLocation.java
5、MyRectangle.java
6、MyShape.java
7、IShape.java
8、Painting.java。