设计模式实验报告材料

合集下载

设计模式实验报告总结(3篇)

设计模式实验报告总结(3篇)

第1篇一、实验背景随着软件工程的不断发展,设计模式作为一种解决软件开发中常见问题的有效方法,越来越受到广泛关注。

本次实验旨在通过学习设计模式,提高编程能力,掌握解决实际问题的方法,并加深对设计模式的理解。

二、实验目的1. 理解设计模式的基本概念和分类;2. 掌握常见设计模式的原理和应用;3. 提高编程能力,学会运用设计模式解决实际问题;4. 培养团队协作精神,提高项目开发效率。

三、实验内容本次实验主要涉及以下设计模式:1. 创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式;2. 结构型模式:适配器模式、装饰者模式、桥接模式、组合模式、外观模式;3. 行为型模式:策略模式、模板方法模式、观察者模式、责任链模式、命令模式。

四、实验过程1. 阅读相关资料,了解设计模式的基本概念和分类;2. 分析每种设计模式的原理和应用场景;3. 编写代码实现常见设计模式,并进行分析比较;4. 将设计模式应用于实际项目中,解决实际问题;5. 总结实验经验,撰写实验报告。

五、实验结果与分析1. 创建型模式(1)单例模式:通过控制对象的实例化,确保一个类只有一个实例,并提供一个访问它的全局访问点。

实验中,我们实现了单例模式,成功避免了资源浪费和同步问题。

(2)工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

实验中,我们使用工厂模式创建不同类型的交通工具,提高了代码的可扩展性和可维护性。

(3)抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。

实验中,我们使用抽象工厂模式创建不同类型的计算机,实现了代码的复用和扩展。

(4)建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实验中,我们使用建造者模式构建不同配置的房屋,提高了代码的可读性和可维护性。

2. 结构型模式(1)适配器模式:将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。

【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告软件体系结构设计模式实验报告学生姓名: 所在学院: 学生学号: 学生班级: 指导老师: 完成日期:一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括组合模式、外观模式、代理模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。

二、实验内容使用PowerDesigner和任意一种面向对象编程语言实现组合模式、外观模式、代理模式、观察者模式和策略模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。

(1) 组合模式使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。

绘制类图并编程模拟实现。

(2) 组合模式某教育机构组织结构如下图所示:北京总部教务办公室湖南分校行政办公室教务办公室长沙教学点湘潭教学点行政办公室教务办公室行政办公室教务办公室行政办公室在该教育机构的OA系统中可以给各级办公室下发公文,现采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。

(注:可以定义一个办公室类为抽象叶子构件类,再将教务办公室和行政办公室作为其子类;可以定义一个教学机构类为抽象容器构件类,将总部、分校和教学点作为其子类。

)(3) 外观模式某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。

读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。

现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求编程模拟实现。

设计模式实验报告范文

设计模式实验报告范文

《设计模式》实验指导书10学时*师:**实验一工厂模式的应用【实验目的】1) 掌握工厂模式(Factory)的特点2) 分析具体问题,使用工厂模式进行设计。

【实验内容和要求】有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。

利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。

绘制该模式的UML图。

【模式UML图】【模式代码(JA V A语言实现)】public class FactoryMethod {public static void main(String[] args) {Computer c;Factory f=new DellFactory();c=f.getComputerType();puterType();f=new LenovoFactory();puterType();f=new AcerFactory();c=f.getComputerType();puterType();}}interface Factory{Computer getComputerType();}class DellFactory implements Factory{ @Overridepublic Computer getComputerType() {return new Dell();}}class AcerFactory implements Factory{ @Overridepublic Computer getComputerType() {return new Acer();}}class LenovoFactory implements Factory{ @Overridepublic Computer getComputerType() {return new Lenovo();}}/*** 电脑品牌*/interface Computer{public void ComputerType();}class Dell implements Computer{@Overridepublic void ComputerType() {// TODO Auto-generated method stubSystem.out.println("Dell Computer");}}class Acer implements Computer{@OverrideSystem.out.println("Acer Computer");}}class Lenovo implements Computer{@Overridepublic void ComputerType() {// TODO Auto-generated method stubSystem.out.println("Lenovo Computer");}}【运行截图】【实验小结】通过本次实验,学会了使用工厂方法模式。

设计实验报告15篇

设计实验报告15篇

设计实验报告设计实验报告15篇在人们越来越注重自身素养的今天,报告的使用频率呈上升趋势,报告具有语言陈述性的特点。

在写之前,可以先参考范文,下面是小编收集整理的设计实验报告,欢迎大家借鉴与参考,希望对大家有所帮助。

设计实验报告1第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。

(]1.2 实验要求在报告中记录建立、保存C程序实习过程。

1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main(){printf (“Hello World! ”);}2)链接。

执行Build-命令。

3)运行。

执行Build Execute 命令。

显示结果。

4)关闭程序工作区。

(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。

第二章数据类型2.1 实验目的(1)掌握C语言的运算符和表达式的正确使用以及C语言的几种基本数据类型和基本输入输出函数的使用方法。

()(2)通过编程进一步理解和掌握运算符的确切含义和功能。

2.2 实验要求(1)在报告中记录建立、保存C程序实习过程。

(2)完成典型题目,分析遇到的困难和实验中的收获。

2.3 实验基本内容输入程序,观察输出结果 1>./*test2.1c*/1)编译如下程序: #includevoid main() {char ch; int k;ch='a',k='b';printf("%d,%x,%c",ch,ch,ch,ch,k); printf("k=%%d ",k) }2)链接。

执行Build-命令。

3)运行。

执行Build Execute 命令。

显示结果。

4)关闭程序工作区。

2>./*test2.2c*/1)编译如下程序: #includevoid main() {float a1,a2; double b1,b2; a1=1234.12; a2=0.000001; b1=1234.12;b2=0.000001;printf("%f,%l f ",a1+a2,b1+b2);}2)链接。

中南大学设计模式实验2

中南大学设计模式实验2

中南大学设计模式实验2实验2 设计模式实验一实验学时: 4每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的1.熟练使用面向对象设计原则对系统进行重构;2.熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的创建型设计模式和结构型设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、适配器模式、桥接模式和组合模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容1.在某图形库API中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:Circle+ + + + +init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidTriangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidRectangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidClient在该图形库中,每个图形类(如Circle、Triangle等)的init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize()方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:①由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;②在图形库中增加并使用新的图形时需要修改客户类源代码;③客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

设计模式实验一实验报告完整版

设计模式实验一实验报告完整版

实验1 UML实验(1)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1.学会安装和使‎用建模工具P‎o werDe‎si gner‎,熟练使用Po‎werDes‎i gner绘‎制常用的UM‎L图形,熟悉常用的U‎M L符号;2.构建用例模型‎来描述软件需‎求,包括绘制用例‎图,撰写用例文档‎并制作用例检‎查矩阵;3. 绘制状态图描‎述对象的状态‎及转换。

二、实验内容1. 某酒店订房系‎统描述如下:(1) 顾客可以选择‎在线预订,也可以直接去‎酒店通过前台‎服务员预订;(2) 前台服务员可‎以利用系统直‎接在前台预订‎房间;(3) 不管采用哪种‎预订方式,都需要在预订‎时支付相应订‎金;(4) 前台预订可以‎通过现金或信‎用卡的形式进‎行订金支付,但是网上预订‎只能通过信用‎卡进行支付;(5) 利用信用卡进‎行支付时需要‎和信用卡系统‎进行通信;(6) 客房部经理可‎以随时查看客‎房预订情况和‎每日收款情况‎。

绘制该酒店订‎房系统的用例‎图。

2. 根据以下场景‎绘制用例图:某企业为了方‎便员工用餐,为企业餐厅开‎发了一个订餐‎系统(COS:Cafete‎ri a Orderi‎n g System‎),企业员工可通‎过企业内联网‎使用该系统。

该系统功能描‎述如下:(1) 企业的任何员‎工都可以查看‎菜单和今日特‎价;(2) 系统的顾客是‎注册到系统的‎员工,可以在线订餐‎(以下操作均需‎先登录)、注册工资支付‎、修改订餐信息‎和删除订餐信‎息,在注册工资支‎付时需要通过‎工资系统进行‎身份验证;(3) 餐厅员工是特‎殊的顾客,可以进行备餐‎(系统记录备餐‎信息)、生成付费请求‎和请求送餐,其中对于注册‎使用工资支付‎的顾客生成付‎费请求并发送‎给工资系统;(4) 菜单管理员是‎餐厅员工的一‎种,可以管理菜单‎;(5) 送餐员也是餐‎厅员工的一种‎,可以打印送餐‎说明、记录送餐信息‎(如送餐时间)以及记录收费‎(对于没有注册‎工资支付的顾‎客,由送餐员收取‎现金后记录)。

UML实验报告书实验3-设计模式

UML实验报告书实验3-设计模式

淮海工学院计算机工程学院实验报告书
课程名:《UML理论及实践》
题目:正向工程
班级:Z计121
学号:2014140093
姓名:薛慧君
一、目的与要求
1、熟悉面向对象原则,熟悉GoF中的模式;
2、会初步使用设计模式解决实际问题;
3、掌握正向工程、逆向工程概念;
4、掌握使用Rose画出类图、交互图等来描述设计模型;
5、掌握使用Rose从设计模型使用正向工程,得到代码框架;
6、掌握使用Rose从代码使用逆向工程,得到设计模型,并文档化Project。

二、实验内容或题目
假设有一CAD系统,可能需要绘制处理若干图形(如矩形、圆形、三角形……);而画图程序有若干版本,画图的工作需要依赖于具体的机器型号,新机器可以使用新的画图程序,旧的机器只能使用老版本的程序,请使用桥模式为本系统设计一个方案:请在Rational Rose中给出设计类图,并使用正向工程生成代码框架;在生成的代码中修改后再使用逆向工程,重新生成设计模型。

三、实验步骤及结果
CAD系统设计模型的类图;
四、结果分析与实验体会
通过本次实验,我掌握了:
(1)桥模式:将抽象部分与实现部分分离,使它们都可以独立的变化。

(2)桥模式适用性:①不希望在抽象和实现部分之间有一个固定的绑架关系②类的抽象以及实现都可以通过生成子类的方法加以扩充③对抽象的实现部分的修改应不会对客户产
生影响④对客户完全隐藏抽象的实现⑤有许多类要生成⑥在多个对象间共享实现,同时对客户隐藏这种实现机制
(3)桥模式实现要点:分别定义抽象的接口和实现的接口,抽象接口中聚合一个实现接口的引用,该引用就是连接接口和实现的桥梁。

设计模式实验报告-工厂模式

设计模式实验报告-工厂模式

实验二:工厂模式实验内容简单工厂方法模式:利用简单工厂方法模式创建pad, phone, watch的对象,并使用这些对象娱乐。

工厂模式:利用工厂模式创建pad, phone, watch的对象,并使用这些对象娱乐。

抽象工厂模式:利用抽象工厂模式创建华为、小米、苹果的pad, phone, watch的对象,并使用这些对象娱乐。

简单工厂方法模式设计图1简单工厂模式类图核心代码ConsumerElectronics.java核心代码Pad.java核心代码Watch.java核心代码Phone.java核心代码ConsumerElectronicsFactory.java核心代码实现效果图 2 简单工厂模式实现效果图工厂模式设计图 3 工厂模式类图核心代码ConsumerElectronicsFactory.java核心代码PadFactory.java核心代码WatchFactory.java核心代码PhoneFactory.java核心代码实现效果图4 工厂模式实现效果图抽象工厂模式设计图5抽象工厂模式类图核心代码AbstractFactory.java核心代码AppleFactory.java核心代码HuaweiFactory.java核心代码MiFactory.java核心代码实现效果图 6 抽象工厂模式实现效果图实验体会做完这次试验,下面是我的一些体会:首先,工厂模式是为了解耦:把对象的创建和使用的过程分开。

其次,工厂模式可以降低代码重复。

如果创建对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。

我们可以这些创建对象的代码放到工厂里统一管理。

既减少了重复代码,也方便以后对该对象的创建过程的修改维护。

由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要逐个修正,只需要在工厂里修改即可,降低维护成本。

另外,因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。

设计型实验报告模板

设计型实验报告模板

一、实验名称【实验名称】二、实验目的1. 熟悉【实验目的1】。

2. 掌握【实验目的2】。

3. 了解【实验目的3】。

三、实验原理【实验原理简介】四、实验仪器与材料1. 仪器:- 【仪器1】- 【仪器2】- 【仪器3】- ...2. 材料:- 【材料1】- 【材料2】- 【材料3】- ...五、实验方法与步骤1. 实验方法【简要描述实验方法】2. 实验步骤1) 准备工作:- 【步骤1】- 【步骤2】- 【步骤3】- ...2) 实验操作:- 【步骤4】- 【步骤5】- 【步骤6】- ...3) 数据记录与分析:- 【步骤7】- 【步骤8】- 【步骤9】- ...六、实验数据记录与分析1. 实验数据记录【在此处记录实验过程中观察到的数据,如表格、图表等形式】2. 数据分析【根据实验数据进行分析,包括但不限于以下内容】- 对比实验前后数据的变化- 分析实验结果与预期目标的关系- 探讨实验中可能存在的问题及原因七、实验结果与讨论1. 实验结果【在此处描述实验结果,包括但不限于以下内容】- 实验现象描述- 数据分析结果- 与预期目标的一致性2. 讨论【对实验结果进行讨论,包括但不限于以下内容】- 分析实验结果背后的原理- 探讨实验过程中遇到的问题及解决方法- 对实验结果的进一步分析及改进建议八、实验结论【总结实验结果,得出实验结论】九、实验心得与体会【总结实验过程中的收获与体会,包括但不限于以下内容】- 对实验原理和方法的深入理解- 实验操作技能的提升- 团队合作的重要性- 实验过程中遇到的问题及解决策略十、参考文献【列出实验过程中参考的文献】【注】以上模板仅供参考,具体实验报告内容需根据实际实验情况进行调整。

java设计模式实验报告

java设计模式实验报告

设计模式实验报告学院:学院专业:班姓名:学号:指导教师:一.实例实例:简单工厂模式使用简单工厂模式设计一个可以创建不同几何形状(圆形、方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个Unsupportedshapeexception.要求真正做出来,不要使用system.out.println。

1.UML图:2.源代码graph.javapackage simplefactory2;import java.awt.Graphics;public interface graph { void draw(Graphics g); void erase(Graphics g); } circle.javapackage simplefactory2;import java.awt.Graphics;public class circle implements graph{@Overridepublic void draw(Graphics g) { g.drawOval(20, 60, 60, 60); }@Overridepublic void erase(Graphics g) { g.clearRect(18, 55, 63, 68); }}rectangle.javapackage simplefactory2;import java.awt.Graphics;public class rectangle implements graph{@Overridepublic void draw(Graphics g) {g.drawRect(160, 60, 60, 60);}@Overridepublic void erase(Graphics g) {g.clearRect(159, 58, 66, 66);}}triangle.javapackage simplefactory2;import java.awt.Graphics;public class triangle implements graph{@Overridepublic void draw(Graphics g) {int[]xPoints={80,120,150}; int[]yPoints={70,120,70}; int nPoints=3;g.drawPolygon(xPoints, yPoints, nPoints); }@Overridepublic void erase(Graphics g) { g.clearRect(81, 70, 70, 60); }} geometryfctory.javapackage simplefactory2;public class geometryfctory {static graph renshow(String type) throws Exception{if("circle".equals(type)){ return new circle();}else if("triangle".equals(type)){ return new triangle();}else if("rectangle".equals(type)){ return new rectangle();}else{throw new Exception("Unsupportedshapeexception");}}} NewJFrame.javapackage simplefactory2;import java.util.logging.Level;import java.util.logging.Logger;public class NewJFrame extends javax.swing.JFrame {public NewJFrame() {initComponents();}@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code">private void initComponents() {jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton();jButton3 = new javax.swing.JButton() ; jButton4 = new javax.swing.JButton();jButton5 = new javax.swing.JButton(); jButton6 = new javax.swing.JButton();jButton7 = new javax.swing.JButton();jTextField1 = new javax.swing.JTextField();jTextField2 = new javax.swing.JTextField();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);jButton1.setText("circle");jButton1.addMouseListener(new java.awt.event.MouseAdapter() {public void mouseClicked(java.awt.event.MouseEvent evt) {jButton1MouseClicked(evt); } });jButton1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton1ActionPerformed(evt); } });jButton2.setText("triangle");jButton2.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton2ActionPerformed(evt); } });jButton3.setText("rectangle");jButton3.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton3ActionPerformed(evt); }});jButton4.setText("其他");jButton4.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton4ActionPerformed(evt); }});jButton5.setText("circle");jButton5.addMouseListener(new java.awt.event.MouseAdapter() {public void mouseClicked(java.awt.event.MouseEvent evt) { jButton5MouseClicked(evt); }});jButton5.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton5ActionPerformed(evt); }});jButton6.setText("triangle");jButton6.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton6ActionPerformed(evt); }});jButton7.setText("rectangle");jButton7.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton7ActionPerformed(evt); }});jTextField1.setText("画图"); jTextField2.setText("檫除");javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(jButton1).addPreferredGap(ponentPlacement.RELATED).addComponent(jButton2).addPreferredGap(ponentPlacement.RELATED).addComponent(jButton3).addGap(18, 18, 18).addComponent(jButton4)).addGroup(layout.createSequentialGroup().addComponent(jButton5).addPreferredGap(ponentPlacement.RELATED).addComponent(jButton6).addPreferredGap(ponentPlacement.RELATED).addComponent(jButton7))).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 40, Short.MAX_VALUE).addComponent(jTextField1)) .addGap(0, 20, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap(173, Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jButton1) .addComponent(jButton2).addComponent(jButton3) .addComponent(jButton4).addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(ponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jButton5) .addComponent(jButton6).addComponent(jButton7).addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(75, 75, 75))); pack();} private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {graph x = null;try {x = geometryfctory.renshow("circle");}catch (Exception ex) {Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); }x.draw(this.getGraphics()); }private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { graph z = null; try {y = geometryfctory.renshow("triangle");}catch (Exception ex) {Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); }y.draw(this.getGraphics());}private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {try {z = geometryfctory.renshow("rectangle");} catch (Exception ex) {Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); }z.draw(this.getGraphics());}private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { graph z = null;try {z = geometryfctory.renshow("aa");} catch (Exception ex) {Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); }z.draw(this.getGraphics()); }private void jButton5MouseClicked(java.awt.event.MouseEvent evt) { graph x = null;try {x = geometryfctory.renshow("circle");} catch (Exception ex) {Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); }x.erase(this.getGraphics());}private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) { graph y = null;try {y = geometryfctory.renshow("triangle");} catch (Exception ex) {Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); }y.erase(this.getGraphics());}private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {graph z = null;try {z = geometryfctory.renshow("rectangle");}catch (Exception ex) {Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);}z.erase(this.getGraphics());}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new NewJFrame().setVisible(true); }});}private javax.swing.JButton jButton1; private javax.swing.JButton jButton2;private javax.swing.JButton jButton3; private javax.swing.JButton jButton4;private javax.swing.JButton jButton5; private javax.swing.JButton jButton6;private javax.swing.JButton jButton7; private javax.swing.JTextField jTextField1;private javax.swing.JTextField jTextField2; }3.运行截图a.点击“运行”,如图1:b.分别点击画图行的“circle”“triangle”“rectangle”按钮,如图2图1 图2C.点击“擦除”行的“triangle”按钮,如图3 d.点击“其他“按钮,如图4图3 图4二.总结通过对本课程设计模式的学习,理解了部分模式的结构、优缺点及适用场景,也体会到了老师说的:设计模式不仅仅是编程工具,更是一门“艺术”。

设计模式实验报告

设计模式实验报告

预备实验UML建模实验目的:加深对UML建模的理解实验环境:MyEclipse(Java)或Rational Rose等实验内容:1、需求描述A.某学校准备开发一套选课管理系统,其主要用户是教师和学生。

假设教师可以查看课程、增加课程和修改课程;学生可以选修一门或多门课程(为简化起见,学生选修某课程后不允许修改和删除),还能够查看所选修课程的成绩。

其中:课程可由课程编号、课程名称进行描述;教师可用工号和姓名进行描述;学生可用学号、姓名进行描述。

B. 某信用卡系统账户具有使用状态和冻结状态,其中使用状态又包括正常状态和透支状态两种子状态。

如果账户余额小于零则进入透支状态,透支状态时既可以存款又可以取款,但是透支金额不能超过5000元;如果余额大于零则进入正常状态,正常状态时既可以存款又可以取款;如果连续透支100天,则进入冻结状态,冻结状态下既不能存款又不能取款,必须要求银行工作人员解冻。

用户可以在使用状态或冻结状态下请求注销账户。

根据上述要求,绘制账户类的状态图。

2、用例图根据上面的需求描述A,运用UML画出用例图。

画图中的用例名和参与者均用中文表示;3、类图根据上面的需求描述A,运用UML画出初始设计类图(仅含业务类),图中应给出属性和方法的中文名称,类与类之间若存在关联,可不确定关联的方向,但需要标出这些关联的多重性。

4、状态图根据上面的需求描述B,运用UML画出状态图实验2 单一职责原则训练实验目的:加深对单一职责原则的理解实验环境:C#.Net/VC++.Net或MyEclipse(Java)等实验内容:1、实例说明某基于Java的C/S系统的“登录功能”通过如下登录类(Login)实现:现使用单一职责原则对其进行重构,并编程实现(可仿真实现数据数据库DAO 形式,当然如果能实现真实的数据库连接并进行数据库的操纵更好)。

package Experiment_One_Code;import java.sql.*;/**** @author Author**/public class DBUtil {public static Connection getConnction() {Connection dbConnection = null;try {Class.forName(DRIVER_CLASS);dbConnection = DriverManager.getConnection(DATABASE_URL,DATABASE_USRE, DATABASE_PASSWORD);} catch (Exception e) {e.printStackTrace();}return dbConnection;}}package Experiment_One_Code;/**** @author Author**/public class UserDAO {private DBUtil db = new DBUtil();private String userName;private String userPassword;public boolean findUser(String userName, String userPassword) { return false;}}package Experiment_One_Code;/**** @author Author**/public class LoginForm {public LoginForm(UserDAO dao) {super();this.dao = dao;}public LoginForm() {super();}UserDAO dao = new UserDAO();public void init() {}public void display() {}public void validate() {}}package Experiment_One_Code;/**** @author Author**/public class MainClass {public static void main(String[] args) { // TODO Auto-generated method stubLoginForm loginForm = new LoginForm();loginForm.init();loginForm.display();loginForm.validate();}}2、实例说明某图形处理系统通过如下类实现:package compute.area_circle.HKT;/**** @author Author1* @date 2019-04-02 上午11:26:41* 正方形类*/public class squareClass {public void Draw() {System.out.println("画一个正方形!");}public void Area() {System.out.println("计算正方形的面积!");}}package compute.area_circle.HKT;/**** @author Author1* @date 2019-04-02 上午11:49:50**/public class figure_Draw_Program {public static void main(String[] args) { // TODO Auto-generated method stubsquareClass square1 = new squareClass();square1.Draw();}}package compute.area_circle.HKT;/*** @author Author1* @date 2019-04-02 上午11:38:47**/public class figure_Compute_Program { /*** @param args*/public static void main(String[] args) { // TODO Auto-generated method stubsquareClass square = new squareClass();square.Area();}}现使用单一职责原则对其进行重构。

最经典的设计模式实验报告

最经典的设计模式实验报告

设计模式实验报告(一)课程名称: ___设计模式__ _实验名称:__创建型与结构型模式专业: 计算机科学与技术学号:姓名:实验日期:2012.4.09工厂模式一、实验目的:1、学习工厂模式设计2、学习抽象工厂模式设计3、学习建造者模式设计4、学习单例模式二、运行环境:Microsoft Visual Studio 2010三、实验内容1、工厂模式模式定义:在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

实例说明:为了让增加新品牌电视机更加方便,可以通过工厂方法模式对该电视机厂进行进一步重构。

可以将原有的工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海型电视机,如果需要生产TCL电视机,只需要对应增加一个新的TCL工厂即可,原有的工厂无需做任何修改,使得整个系统具有更好的灵活性和可扩展性。

①源代码:Class1:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;namespace工厂模式?{public interface TV{void play();}public class HaierTV : TV{public void play(){MessageBox.Show("海£尔?电?视酣?播¥放?中D");}}public class HisenseTV : TV{public void play(){MessageBox.Show("海£信?电?视酣?播¥放?中D");}}public interface TVFactory{TV produceTV();}public class HaierTVFactory : TVFactory{public TV produceTV(){MessageBox.Show("海£尔?电?视酣?工¤厂§生Θ?产ú海£信?电?视酣?机ú");return new HaierTV();}}public class HisenseTVFactory : TVFactory{public TV produceTV(){MessageBox.Show("海£信?电?视酣?工¤厂§生Θ?产ú海£信?电?视酣?机ú");return new HisenseTV();}}class Class1{}}Form1.csusing System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace工¤厂§模£式?{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e) {TV tv;TVFactory factory;factory = new HaierTVFactory (); //唯¨一?不?一?样ù的?地?方?tv=factory.produceTV ();tv .play ();}private void button2_Click(object sender, EventArgs e) {TV tv;TVFactory factory;factory = new HisenseTVFactory(); //唯¨一?不?一?样ù的?地?方?tv = factory.produceTV();tv.play();}}}②运行结果:主界面:点击“海尔电视”按钮后:再点击“确定”后:点击“海信电视”按钮后:点击“确定”按钮后:2、抽象工厂模式模式定义:提供一个创建一系列相关或相互依赖对象的接口,且无需指定他们具体的类。

【免费下载】设计模式实验报告

【免费下载】设计模式实验报告
Client
+ init ()
Circle
+ setColor () : void
+ fill ()
+ setSize () : void
+ display () : void
...
: void
: void
+ init ()
Triangle
+ setColor () : void
+ fill ()
+ setSize () : void
实验二 设计模式实验一
一、实验目的
熟练使用面向对象设计原则对系统进行重构;熟练使用 PowerDesigner 和任意一种面 向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂 模式、单例模式、适配器模式、桥接模式和组合模式,理解每一种设计模式的模式动机, 掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。
浅绿色按钮
皮肤库
Spring风格
Summer风格
蓝色边框组合框 该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮肤,开发人
2
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

设计模式实验一实验报告完整版

设计模式实验一实验报告完整版

实验1 UML实验(1)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1.学会安装和使用建模工具PowerDesigner,熟练使用PowerDesigner绘制常用的UML 图形,熟悉常用的UML符号;2.构建用例模型来描述软件需求,包括绘制用例图,撰写用例文档并制作用例检查矩阵;3. 绘制状态图描述对象的状态及转换。

二、实验内容1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。

绘制该酒店订房系统的用例图。

2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。

该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。

工厂设计模式实验报告

工厂设计模式实验报告

一、实验背景工厂设计模式是一种常用的创建型设计模式,其主要目的是将对象的创建和使用分离,使得客户端代码无需关心具体对象的创建过程,只需关注对象的接口和使用方法。

通过工厂设计模式,可以降低系统之间的耦合度,提高代码的可扩展性和可维护性。

本次实验旨在通过实现工厂设计模式,加深对设计模式的理解,并掌握其应用方法。

二、实验目的1. 理解工厂设计模式的基本概念和原理。

2. 掌握工厂设计模式的三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。

3. 学会使用工厂设计模式解决实际问题。

三、实验内容1. 简单工厂模式简单工厂模式由一个工厂类负责创建所有产品的实例。

客户端只需传递一个参数,工厂类即可根据参数创建相应的产品实例。

(1)创建产品接口```javapublic interface Product {void operation();}```(2)创建具体产品类```javapublic class ConcreteProductA implements Product {@Overridepublic void operation() {System.out.println("执行产品A的操作");}}public class ConcreteProductB implements Product {@Overridepublic void operation() {System.out.println("执行产品B的操作");}}```(3)创建简单工厂类```javapublic class SimpleFactory {public static Product createProduct(String type) { if ("A".equals(type)) {return new ConcreteProductA();} else if ("B".equals(type)) {return new ConcreteProductB();}return null;}}```(4)客户端代码```javapublic class Client {public static void main(String[] args) {Product productA = SimpleFactory.createProduct("A");productA.operation();Product productB = SimpleFactory.createProduct("B");productB.operation();}}```2. 工厂方法模式工厂方法模式在简单工厂模式的基础上增加了一个抽象工厂类,具体工厂类继承自抽象工厂类,并实现具体产品的创建。

设计性实验报告样本

设计性实验报告样本

一、实验目的1. 了解光照强度对植物生长的影响;2. 探究不同光照强度对植物生长速度、叶片形态及生理特性的影响;3. 为实际生产中合理调控光照强度提供理论依据。

二、实验材料1. 植物材料:小麦种子;2. 实验器材:培养皿、恒温培养箱、光照箱、电子秤、尺子、显微镜等;3. 实验试剂:蒸馏水、NaCl溶液、KNO3溶液等。

三、实验方法1. 实验设计:采用完全随机设计,将实验分为5组,每组设置3个重复。

光照强度分别为:A组(自然光照)、B组(自然光照+遮光50%)、C组(自然光照+遮光75%)、D组(自然光照+遮光90%)、E组(自然光照+遮光95%)。

2. 实验步骤:(1)选取健康小麦种子,进行消毒、浸泡,待发芽后均匀播种于培养皿中;(2)将培养皿放入恒温培养箱中,保持温度在25℃;(3)根据实验设计,调整光照箱的光照强度,将培养皿放入光照箱中;(4)每隔3天,观察并测量植物的生长情况,包括株高、叶片数、叶片宽度、叶片面积等;(5)在实验结束时,收集植物叶片,用蒸馏水洗净,称量鲜重,进行生理指标测定。

四、实验结果与分析1. 植物生长速度:由实验结果可知,随着光照强度的降低,植物的生长速度逐渐减慢。

其中,A组(自然光照)植物生长速度最快,D组(自然光照+遮光90%)和E组(自然光照+遮光95%)植物生长速度明显降低。

2. 叶片形态:实验结果表明,随着光照强度的降低,植物叶片逐渐变薄,叶色变浅,叶片面积减小。

其中,A组(自然光照)植物叶片形态最佳,D组(自然光照+遮光90%)和E组(自然光照+遮光95%)植物叶片形态较差。

3. 生理特性:实验结果显示,随着光照强度的降低,植物的光合速率逐渐降低,呼吸速率逐渐升高。

其中,A组(自然光照)植物光合速率最高,呼吸速率最低,D组(自然光照+遮光90%)和E组(自然光照+遮光95%)植物光合速率和呼吸速率均较低。

五、结论1. 光照强度对植物生长有显著影响,随着光照强度的降低,植物的生长速度、叶片形态及生理特性均受到影响;2. 在实际生产中,应根据植物生长需求,合理调控光照强度,以提高植物产量和品质。

材料设计及制备综合实验报告

材料设计及制备综合实验报告

材料设计及制备综合实验报告【实验目的】1.掌握材料设计的基本原理和方法。

2.熟悉材料制备的常用技术和操作流程。

【实验原理】材料设计是一门研究如何通过合理设计材料的结构、成分和制备工艺,以使材料具备所需特性的学科。

材料设计有助于提高材料的性能、延长材料的使用寿命,甚至研发出新型材料。

材料设计的步骤主要包括结构设计、成分设计和制备工艺设计。

材料制备是材料设计的重要环节,制备技术的选择直接影响材料的性能和物理化学特性。

材料制备常用的方法包括溶胶-凝胶法、高温煅烧法、溶剂热法等。

【实验设备】1.恒温槽2.搅拌器3.加热板4.装有恒温控制器的反应釜5.离心机6.称量仪7.石墨舟8.热分析仪【实验步骤】1.结构设计:根据所需材料的特性,确定材料的结构形式(如晶体、纤维、薄膜等)。

2.成分设计:根据所需特性,确定材料的成分,包括主要元素和参与反应的辅助元素。

3.制备工艺设计:选择适合的制备方法,如溶胶-凝胶法、高温煅烧法等。

4.准备试样:根据设计的制备方法,准备所需材料的试样。

5.材料制备:按照制备工艺设计的要求,进行材料的制备。

6.材料性能测试:对制备好的材料进行性能测试,包括热性能、力学性能等。

7.结果分析:对测试结果进行分析,评价材料的性能是否符合设计要求。

【实验结果】根据所设计的储能材料的要求,采用溶胶-凝胶法进行制备。

在恒温槽中加热搅拌,将所需主要元素和辅助元素的溶液慢慢加入,形成凝胶。

将制备好的凝胶进行煅烧处理,并经过多次离心洗涤。

最后,得到纯净的储能材料样品。

【实验结论】通过实验,我们成功地制备了符合设计要求的储能材料。

通过热分析仪测试,得到了材料的热性能曲线和力学性能的测试数据。

根据测试结果,评价材料的性能符合设计要求。

【思考与改进】实验中,我们针对储能材料进行了材料设计和制备,并取得了较好的实验结果。

但在实验过程中,也存在一些需要改进的地方。

例如,溶胶-凝胶法制备过程中,需要控制搅拌的速度和温度,确保溶液充分混合和凝胶的形成。

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

实验一单例模式的应用1 实验目的1) 掌握单例模式(Singleton)的特点2) 分析具体问题,使用单例模式进行设计。

2 实验容和要求很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。

通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件容的对象。

如果在系统运行中,有很多地方都需要使用配置文件的容,系统中会同时存在多份配置文件的容,这会严重浪费存资源。

事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。

那么应该怎么实现呢?用C#控制台应用程序实现该单例模式。

绘制该模式的UML图。

3 实验代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AppConfig{public class Singleton{private static Singleton instance;private Singleton(){}public static Singleton GetInstance(){if (instance == null){instance = new Singleton();}return instance;}}class Program{static void Main(string[] args){Singleton singletonOne = Singleton.GetInstance();Singleton singletonTwo = Singleton.GetInstance();if (singletonOne.Equals(singletonTwo)){Console.WriteLine("singletonOne 和singletonTwo 代表的是同一个实例");}else{Console.WriteLine("singletonOne 和singletonTwo 代表的是不同实例");}Console.ReadKey();}}}4 实验结果实验二工厂模式的应用1 实验目的1) 掌握工厂模式(Factory)的特点2) 分析具体问题,使用工厂模式进行设计。

2 实验容和要求有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。

利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。

绘制该模式的UML图。

3 实验代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Factory{class Computer{public virtual void print(){Console.Write("我是Computer\n");}}class HPComputer:Computer{public override void print(){Console.Write("我是HPComputer\n");}}class AcerComputer : Computer{public override void print(){Console.Write("我是AcerComputer\n");}}class DellComputer : Computer{public override void print(){Console.Write("我是DellComputer\n");}}interface Ifactory{Computer CreateComputer();}class HPFactory : Ifactory{public Computer CreateComputer(){return new HPComputer();}}class AcerFactory : Ifactory{public Computer CreateComputer(){return new AcerComputer();}}class DellFactory : Ifactory{public Computer CreateComputer(){return new DellComputer();}}class Program{static void Main(string[] args){Ifactory factory = new HPFactory();Computer computer = factory.CreateComputer();computer.print();factory = new DellFactory();computer = factory.CreateComputer();computer.print();factory = new AcerFactory();computer = factory.CreateComputer();computer.print();}}}4 实验截图实验三抽象工厂模式的应用1 实验目的1) 掌握抽象工厂模式(Abstract Factory)的特点2) 分析具体问题,使用抽象工厂模式进行设计。

2 实验容和要求麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。

绘制该模式的UML图。

3 实验代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{class Cola{public virtual void print(){Console.Write("i am cola\n");}class Hum{public virtual void print(){Console.Write("i am hamburger\n");}}class KFCCola : Cola{public override void print(){Console.Write("i am KFCcola\n");}class MDCola : Cola{public override void print(){Console.Write("i am MDcola\n");}}class KFChum:Hum{public override void print(){Console.Write("i am KFChamburger\n");}class MDhum : Hum{public override void print(){Console.Write("i am MDhamburger\n");}}abstract class factory{public abstract Hum createHum();public abstract Cola createCola();}class KFCFectory : factorypublic override Hum createHum(){return new KFChum();}public override Cola createCola(){return new KFCCola();}}class MDFectory : factory{public override Hum createHum(){return new MDhum();}public override Cola createCola(){return new MDCola();}}class Program{static void Main(string[] args){factory f = new KFCFectory();Hum h = f.createHum();Cola c = f.createCola();h.print();c.print();f = new MDFectory();h = f.createHum();c = f.createCola();h.print();c.print();}}}4 实验结果实验四建造者模式的应用1 实验目的1) 掌握建造者模式(Builder)的特点2) 分析具体问题,使用建造者模式进行设计。

2 实验容和要求建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。

所谓“复杂对象”,是指此对象中还含有其它的子对象。

我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。

绘制该模式的UML图。

3 实验代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Builder{class Car{private String wheel;private String oilBox;private String body;public void setWheel(String wheel) {this.wheel = wheel;}public void setOilBox(String oilBox) {this.oilBox = oilBox;}public void setBody(String body) {this.body = body;}public void introuduce(){Console.WriteLine(wheel);Console.WriteLine(oilBox);Console.WriteLine(body);}}abstract class CarBuilder{protected Car car = new Car();public abstract void buildWheel();public abstract void buildOilBox();public abstract void buildBody();public Car getCar(){return car;}}class BMWBuilder : CarBuilder{public override void buildBody(){car.setWheel("wheel made in BMW");}public override void buildOilBox(){car.setOilBox("oilBox made in BMW");}public override void buildWheel(){car.setBody("body made in BMW");}}class BenZBuilder : CarBuilder{public override void buildBody(){car.setWheel("wheel made in Benz");}public override void buildOilBox(){car.setOilBox("oilBox made in Benz");}public override void buildWheel(){car.setBody("body made in Benz");}}class Director{private CarBuilder carBuilder;public Director(CarBuilder carBuilder){this.carBuilder = carBuilder;}public void setCarBuilder(CarBuilder carBuilder) {this.carBuilder = carBuilder;}public void construct(){carBuilder.buildWheel();carBuilder.buildBody();carBuilder.buildOilBox();}}class Program{static void Main(string[] args){Car car;CarBuilder carbuilder = new BMWBuilder();Director director = new Director(carbuilder);director.construct();car = carbuilder.getCar();car.introuduce();carbuilder = new BenZBuilder();director.setCarBuilder(carbuilder);director.construct();car = carbuilder.getCar();car.introuduce();Console.ReadKey();}}}4 实验结果。

相关文档
最新文档