1、 设计模式课程设计设计模式课程设计 题题 目:目: 画画 图图 程程 序序 学学 院:院: 信息科学与技术学院信息科学与技术学院 专专 业:业: 软件工程软件工程 学学 号:号: 姓姓 名:名: 1需求分析 该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基 本图形的绘制功能。 1.1 设计模式要求 至少在其中运用 6 种模式,其中创建、结构和行为模式都要涉及到 1.2 画图基本要求 能实现基本图形的绘制功能 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形等)和持久 化(利用文件或利用数据库) 。 2.系统设计 首先,画图程序可以实现绘制
2、圆形、矩形和按钮,这里可以将圆形、矩形和 按钮看作三个不同的类,那么我们可以采用抽象工厂的方式来创建它们。对于画 组合图,我们可以采用组合模式将二者结合起来。而对于图形颜色或者粗细的改 变,我们可以使用外观模式。然后,我们可以使用原型模式来实现对于最后一个 图形的复制。在系统中可以使用代理模式来实现显示图片。下面是对需要用到的 设计模式进行的分析。 2.1 使用设计模式 2.1.1 抽象工厂模式 首先,在该系统中,我们使用一个类:Element 类来保存画图的元素。该类 保存了图形的类别,起始点,长度、宽度,颜色和边界大小的。 我们将圆形(CCircle 类) 、矩形(CRec 类)和按钮(C
3、Button)看作是不同的 类,它们都有一个父类:Paint 类。Paint 类提供了创建具体对象的判别依据的 接口,由具体的类来完成判断。抽象工厂类(AbstractFactory 类)提供了创建 各个类的对象的接口,由具体工厂(Factory 类)来创建具体的类的对象。 具体实现代码如下: 抽象图形: public abstract class Paint public Element e; public abstract int GetPaint(); public abstract void Operation(Paint p,int n); 具体图形圆: public class C
4、Circle : Paint public override int GetPaint() return 1; public override void Operation(Paint p,int n) throw new NotImplementedException(); 矩形类和按钮类类似。 抽象工厂类如下: public abstract class AbstractFactory public abstract Paint CreateCircle(); public abstract Paint CreateRec(); public abstract Paint CreateBu
5、tton(); 具体工厂类如下: public class Factory : AbstractFactory public override Paint CreateCircle() return new CCircle(); public override Paint CreateRec() return new CRec(); public override Paint CreateButton() return new CButton(); 2.1.2 享元模式 为了将所画的图的所有信息保存起来,我们采用向量将每个对象保存起来。 但每个类都有每个类的特点,那么在这里我们就可以使用享元模
6、式了。定义一个 以 Paint 的对象为元素的的 List, 每当画一个图的时候, 就让这个 List 把这个 Paint 元素加进来。虽然圆形、矩形和按钮是不同的类,但他们都继承于 Paint 类的, 那么使用享元模式(享元类为:FlyWeight)就不会出错了。 具体代码实现如下: public class FlyWeight public List paintInfo = new List(); void AddPaint(Paint a) paintInfo.Add(a); 2.1.3 装饰模式 在该系统中,我们要对选中的图形进行加粗,可以使用装饰模式来实现。我 们定义一个抽象装饰类(Decorator 类) ,它提供了对图形进行操作的接口。具 体的进行画图宽度设置的装饰类(DecoratorBold 类)完成加装饰和减装饰的操 作。 具体代码实现如下: publi