课程设计报告
课程名称:
设计模式
题目名称:
西瓜市场
《设计模式》课程设计报告
目 录
目录
1 系统需求.......................................................................................................... 1
1.1 概述....................................................................................................... 1
1.2 功能描述............................................................................................... 1
2 系统分析.......................................................................................................... 2
2.1 解决思路............................................................................................... 2
2.2 模式描述................................................................................................ 2
3 系统设计.......................................................................................................... 5
3.1 类和接口设计....................................................................................... 5
3.2 UML 类图.............................................................................................. 6
3.3 界面设计(图形界面)....................................................................... 7
3.4 功能设计............................................................................................... 7
4 系统编码实现.................................................................................................. 8
5 测试与运行结果............................................................................................ 10
6 总结................................................................................................................ 11
参考文献............................................................................................................ 13
附录:完整程序代码........................................................................................ 14
《设计模式》课程设计报告
1 系统需求
1.1 概述
Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是有 Sun
microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台的总称。
Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人
PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有
全球最大的开发者专业群。在全球云计算和移动互联网的产业环境下,Java 更具
备了显著的优势和广阔前景。运行环境:意指一种把半编译的执行码在目标机器
上运行的环境。
该系统是西瓜售卖程序,我们用设计模式的思想来设计系统结构,然后实现
基本的购买功能。在西瓜售卖系统的开发中,要应用类的继承机制以及一些设计
模式,在设计开发过程中,需要处理个各类相应的封装,并且还要协调好各个模
块之间的逻辑依赖关系和数据通信关系。
1.2 功能描述
(1)购买商品时,可以选择现金支付和扫码支付等支付方式。
(2)可以自由选择商品及商品数目。
(3)可以打印小票。
(4)系统会自动计算该订单需要花费金额数。
1
《设计模式》课程设计报告
2 系统分析
2.1 解决思路
在设计软件的过程中出现了困难单个模式拿出来做都好说,一旦要结合起来
就需要本质的理解各个模式的作用和思想,比如建造者模式的思想就是把一个复
杂的实体分解成各个小的部件,由此我便想到了可以将小票的各个部分进行分
解,从而可以用建造者模式的思想进行实现。通过代理模式的学习以及老师课上
的形象举例,让我想到买卖的过程比较容易实现,并且可以使用抽象工厂模式商
品的生产。
在构建图形界面的时候遇到了比较大的问题。一开始是因为不熟悉软件,导
致某些部件不小心删除,不知道如何还原;后来是界面的搭建过程懂得简单的快
速开发界面,即用 design 拖动部件实现。一旦遇到些逻辑就会比较迷茫,比如如
何实现单选按钮的逻辑。不过在借鉴了在 Android 中的学习,这些小困难也比较
容易的解决了。
2.2 模式描述
(1)单例模式
1 定义:
确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例
2 特点:
1) 私有化的构造函数
2) 私有的静态的全局变量
3) 公有的静态的方法
3 优点:
1) 单例模式提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,
所以它可以严格控制客户怎样以及何时访问它
2) 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要
2
《设计模式》课程设计报告
频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。
3) 允许可变数目的实例。基于单例模式可以进行扩展,使用与控制单例对象相
似的方法来获得指定个数的实例对象,既节省系统资源,又解决了由于单例
对象共享过多有损性能的问题。(注:自行提供指定数目实例对象的类可称为
多例类。)
(2)抽象工厂模式
1 定义:
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
2 特点:
1) 和工厂方法一样,具有良好的封装性,抽象工厂是工厂方法的升级形式。
2) 横向扩展容易。例如增加一个 Image,我们只需要创建两个具体的产品类
WindowsImage 和 LinuxImage,然后由工厂创建即可。
3) 纵向扩展困难。例如添加一个新的产品族 Android,AbstractCreator 就需要
对应增加一个 createAndroidProduct(),如果抽象工厂存在多个子类,那么其
所有子类也都要随之更改,严重违背开闭原则。
3 优点:
1) 抽象工厂模式隔离了具体类的生成,使得客户端并不需要知道什么被创建。
由于这种隔离,更換一个具体工厂就变得相对容易,所有的具体工厂都实现
了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例就可以在
某种程度上改变整个软件系统的行为。
2) 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只
使用同一个产品族中的对象。
3) 增加新的产品族很方便,无须修改已有系统,符合开闭原则。
(3)建造者模式
1 定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同
的表示。
2 特点:
分步构建一个复杂的对象,可以用不同组合或顺序建造出不同意义的对象,
3
《设计模式》课程设计报告
通常使用者并不需要知道建造的细节,通常使用链式调用来进行建造过程,最后
调用 build 方法来生成最终对象。
3 优点:
1) 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品
的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
2) 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方
便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即
可得到不同的产品对象。由于指挥者类针对抽象建造者编程,增加新的具体
建造者无须修改原有类库的代码,系统扩展方便,符合开闭原则
3) 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的
方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
(4)代理模式
1 定义:
给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问
2 特点:
两个子类共同实现一个接口,其中一个子类负责真实业务实现,另一个子类
完成辅助真实业务主题的操作。
3 优点:
1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度
2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代
码,符合开闭原则,系统具有较好的灵活性和可扩展性。
此外,不同类型的代理模式具有独特的优点,例如:
1) 远程代理为位于两个不同地址空间的对象的访问提供了一种实现机制,可以
将些消耗资源较多的对象和操作移至性能更好的计算机上,提高了系统的整
体运行效率,
2) 虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可
以在定程度上节省系统的运行开销。
3) 缓冲代理为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中
能够共享这些结果,优化系统性能,缩短执行时间。
4
《设计模式》课程设计报告
4) 保护代理可以控制对一个对象的访问权限,为不同用户提供不同级别的使用
权限。
3 系统设计
3.1 类和接口设计
buyWatermelon 文件夹:实现的是代理模式
IBuyWatermelon 是购买接口,
BuyWatermelonProxy 是代理购买类
Customer 是客户类
customer 文件夹:实现的是建造者模式
Order 是订单类
OderBuilder 是订单建造者类,抽象类
HeimeirenQilinguaSaoma、HeimeirenSaoma、
HeimeirenQilinguaXianjin、HeimeirenXianjin、
QilinguaSaoma 、 QilinguaXianjin 均 为
OderBuilder 的实体类,实现各种类型的小票
部件的建造。
OrderController 是指挥类,指挥小票的创建
过程。
gouYuan 文件夹:实现的是单例模式
GuoYuan 是果园类,是使用静态内部类实现的单例模式
main 文件夹:运行的主函数
Frame 测试类,包括窗口界面的设计
5
《设计模式》课程设计报告
watermelon 文件夹:实现的是抽象工厂模式
Heimeiren 类:黑美人西瓜的实体类
HeimeirenFactory 类:黑美人西瓜工厂的实体类
QiLinGua 类:麒麟瓜的实体类
QiLinGuaFactory 类:麒麟瓜工厂的实体类
Watermelon 接口:抽象西瓜的接口
WatermelonFactory 接口:抽象西瓜工厂的接口
3.2 UML 类图
西瓜工厂:抽象工厂模式
小票:建造者模式
果园:单例模式
6