




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计模式课程设计题 目: 画 图 程 序 学 院: 信息科学与技术学院 专 业: 软件工程 学 号: 20092384 姓 名: 陈 志 1需求分析该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能。1.1 设计模式要求至少在其中运用 6 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。1.2 画图基本要求能实现基本图形的绘制功能1.3 画图高级要求实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形等)和持久化(利用文件或利用数据库)。2.系统设计首先,画图程序可以实现绘制圆形、矩形和按钮,这里可以将圆形、矩形和按钮看作三个不同的类,那
2、么我们可以采用抽象工厂的方式来创建它们。对于画组合图,我们可以采用组合模式将二者结合起来。而对于图形颜色或者粗细的改变,我们可以使用外观模式。然后,我们可以使用原型模式来实现对于最后一个图形的复制。在系统中可以使用代理模式来实现显示图片。下面是对需要用到的设计模式进行的分析。2.1 使用设计模式2.1.1 桥梁模式桥梁模式 , 结构型模式一种 .设计程序过程中 , 会经常使用到抽象类或者接口来完成抽象的过程 。继承或实现的类通过不同的实现方式来完成抽象类或接口的变化 , 也就是实现过程的变化 , 但可能会有这样的情况 , 抽象过程同样需要进行变化 , 也就是抽象类或者接口需要变化 , 这样就会
3、造成原有的继承或实现关系复杂 , 关系混乱 .桥梁模式利用将抽象层和实现层进行解耦 , 使两者不再像继承或实现这样的较强的关系 , 从而使抽象和实现层更加独立的完成变化的过程 . 使系统更加清晰 。桥梁模式主要由抽象类、修正抽象类、实现类以及具体实现类组成 .抽象类 , 制定接口 , 同时给出一个实现化的引用 。修正抽象类 , 扩展抽象类 , 修正或改变抽象类中指定的接口 。实现类 , 提供实现化角色的接口 , 但不进行具体实现过程 , 该接口不一定给出与抽象类相同的接口 , 只是提供实现的方式 。具体实现类 , 完成实现类中定义的实现接口的具体实现过程。具体代码如下:package brid
4、gepattern;import java.awt.color;import java.awt.graphics;import java.util.random;import cn.ming.main.circle;public class cpic extends pic public cpic(graphics g) super(g); public void drawpic(graphics g)g.setcolor(color.red);circle c1 = new circle();random ran2 = new random();int a = ran2.nextint(15
5、0)+10; int b = ran2.nextint(350)+200;int c = ran2.nextint(280)+140; c1.settings(a,b,c);g.filloval(b-a/2,c-a/2,a,a);g.setcolor(color.blue);g.filloval(50+b-a/2,c-a/2-50,a,a);g.setcolor(color.green);g.filloval(100+b-a/2,c-a/2,a,a);package bridgepattern;import java.awt.graphics;public abstract class pic
6、 public graphics g; pic(graphics g) this.g = g; public abstract void drawpic(graphics g); package bridgepattern;import java.awt.color;import java.awt.graphics;import java.util.random;import cn.ming.main.circle;public class rpic extends pic public rpic(graphics g) super(g);public void drawpic(graphic
7、s g)g.setcolor(color.red);circle c2 = new circle();random ran2 = new random();int a = ran2.nextint(150)+10; int b = ran2.nextint(350)+100;int c = ran2.nextint(150)+100; c2.settings(a,b,c); g.filloval(b-a/2,c-a/2,a,a);g.setcolor(color.blue);g.filloval(b-3*a/8,c-3*a/8,3*a/4,3*a/4);g.setcolor(color.whi
8、te);g.filloval(b-a/4,c-a/4,a/2,a/2);g.setcolor(color.green);g.filloval(b-a/8,c-a/8,a/4,a/4);运行结果:2.1.2 装饰模式java23种设计模式之一,英文叫decorator pattern,又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式的特点;(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以和真实对象相同的方式和装饰对象交互。(2) 装饰对象包含一个真实对象的引用(reference)
9、(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。具体代码如下:package decoratorpattern;import java.awt.graphics;import cn.ming.main.triangles;public class decotr extends triangles public triangles t; private graphics g; pu
10、blic decotr()t = new triangles(); public static void filltr(graphics g,triangles t)if(t != null)t.filltr(g,t); package decoratorpattern;import java.awt.color;import java.awt.graphics;import cn.ming.main.triangle;public class decotr1 extends decotr public static void filltr(graphics g,triangle t)g.se
11、tcolor(color.green);g.filloval(t.x-25,t.y-25,50,50); package decoratorpattern;import java.awt.color;import java.awt.graphics;import cn.ming.main.triangle;public class decotr2 extends decotr public static void filltr(graphics g,triangle t)g.setcolor(color.red);g.filloval(t.x+t.w-25,t.y-25,50,50); 运行结
12、果:2.1.3策略模式策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c+z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。 策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响 到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而
13、且该程序有多种实现方式时使用。具体代码实现如下:package strategypattern;import java.awt.graphics;import java.awt.point;public class policystrategy s;public policy(strategy s)this.s = s;public void choosepolicy(graphics g,point p1,point p2,point p3)s.drawing(g,p1,p2,p3); package strategypattern;import java.awt.graphics;impo
14、rt java.awt.point;public abstract class strategypublic abstract void drawing(graphics g,point p1,point p2,point p3);package strategypattern;import java.awt.color;import java.awt.graphics;import java.awt.point;public class strategya extends strategypublic point p1,p2,p3; public double area,p; public
15、double distenceofpoints(point p1, point p2) return math.sqrt(p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y); public point getcircumcenter(point p1, point p2, point p3) double dis12 = distenceofpoints(p1, p2);double dis23 = distenceofpoints(p2, p3);double dis31 = distenceofpoints(p3, p1
16、);p = dis12 + dis23 + dis31;double pp = p/2; area = math.sqrt(pp * (pp - dis12) * (pp - dis23) * (pp - dis31); double x = (p1.x * dis23 + p2.x * dis31 + p3.x * dis12) / p; double y = (p1.y * dis23 + p2.y * dis31 + p3.y * dis12) / p; return new point(int) x, (int) y); public void drawing(graphics g,p
17、oint p1,point p2,point p3) /points p1,points p2,points p3 g.drawline(p1.x,p1.y,p2.x,p2.y);g.drawline(p2.x,p2.y,p3.x,p3.y);g.drawline(p3.x,p3.y,p1.x,p1.y); point center = getcircumcenter(p1, p2, p3); double radius = (2 * area) / p; int x = (int) (center.x - radius); int y = (int) (center.y - radius);
18、 int width = (int) (radius * 2); g.setcolor(color.blue); g.filloval(x, y, width, width); package strategypattern;import java.awt.color;import java.awt.graphics;import java.awt.point;public class strategyb extends strategypublic point p1,p2,p3; public point getcircumcenter(point p1, point p2, point p
19、3) double a = 2 * (p2.x - p1.x); double b = 2 * (p2.y - p1.y); double dp1=p1.x * p1.x + p1.y * p1.y; double dp2=p2.x * p2.x + p2.y * p2.y; double dp3=p3.x * p3.x + p3.y * p3.y; double c = dp2- dp1; double d = 2 * (p3.x - p2.x); double e = 2 * (p3.y - p2.y); double f = dp3-dp2; double x = (b * f - e
20、* c) / (b * d - e * a); double y = (d * c - a * f) / (b * d - e * a); return new point(int) x, (int) y); public void drawing(graphics g,point p1,point p2,point p3) g.drawline(p1.x,p1.y,p2.x,p2.y);g.drawline(p2.x,p2.y,p3.x,p3.y);g.drawline(p3.x,p3.y,p1.x,p1.y); point center = getcircumcenter(p1, p2,
21、p3); double radius = center.distance(p1); int x = (int) (center.x - radius); int y = (int) (center.y - radius); int width = (int) (radius * 2); g.setcolor(color.red); g.drawoval(x, y, width, width); 运行结果:2.2 画图功能分析2.2.1 画一个图形当选定画一个图形后,由外观模式确定画图的类型,并且得到一个具体的圆形类、矩形类或按钮类的对象。由鼠标按下的点确定圆形对象的圆心或者矩形和按钮对象的起始
22、点,鼠标起来的点和按下点的关系确定圆形对象的半径或者矩形和按钮对象的长度和宽度。然后将该对象的所有信息包括上面所述的信息和图形类型、画笔颜色和画笔宽度设置好了后,加入享元类中。2.2.2 画组合图2.2.3 选中图形关于选中图形,采用遍历享元的方式,考虑到一般情况先前一个图的区域会被后面所画的图区域覆盖,那么我们从享元的后面开始遍历,当鼠标按下的点位于某个对象区域之中时,改变其颜色,并且提供移动其位置的功能。当选中一个图形时,可以使用加装饰或者减装饰的功能,还可以提供放大和缩小的功能。当选择了选取功能时,就不能画图了,当我们选择“取消选取”后,取消了关于选取图形的操作,又可以画图了。2.2.4 加、减装饰首先,你需要确定装饰的图形(对象)是哪个,需要选取
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同视角下的产品经销三方合作
- 工业园区食堂劳务合同标准版
- 梧州市长洲区政府绿化工程委托合同
- 隐名投资利益分配合同
- 代理社保业务合同合作协议2025
- 代理合作协议合同模板
- 搪瓷企业设备更新与技术改造考核试卷
- 旅游客运突发事件应急预案考核试卷
- 政策性银行服务农村电商与精准扶贫考核试卷
- 后勤服务中的客户关系管理测试考核试卷
- 借哪吒精神燃开学斗志 开学主题班会课件
- 2025年初中主题班会课件:好习惯成就好人生
- 学校教职工代表大会全套会议会务资料汇编
- 中华人民共和国监察法宣贯培训
- 2025年山东传媒职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2025年春新教科版物理八年级下册课件 第10章 流体的力现象 1 在流体中运动
- 《中医基础理论》课件-中医学理论体系的基本特点-整体观念
- 全国职业院校技能大赛高职组(商务数据分析赛项)备赛试题及答案
- GB/T 45107-2024表土剥离及其再利用技术要求
- 课题申报书:“四新”视域下地方高校学科建设与人才培养研究
- 施工爆破作业审批制度范文(2篇)
评论
0/150
提交评论