设计模式实验报告(优选.)

合集下载

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

设计模式上机实验二实验报告

设计模式上机实验二实验报告

设计模式实验二实验报告书专业班级软件0703学号24姓名吉亚云指导老师刘伟时间2010年4月24日中南大学软件学院实验二设计模式上机实验二一、实验目的使用PowerDesigner和任意一种面向对象编程语言实现几种常用的设计模式,加深对这些模式的理解,包括装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式。

二、实验内容使用PowerDesigner和任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式,包括根据实例绘制相应的模式结构图、编写模式实现代码,运行并测试模式实例代码。

三、实验要求1. 正确无误绘制装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式的模式结构图;2. 使用任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式,代码运行正确无误。

四、实验步骤1. 使用PowerDesigner绘制装饰模式结构图并用面向对象编程语言实现该模式;2. 使用PowerDesigner绘制外观模式结构图并用面向对象编程语言实现该模式;3. 使用PowerDesigner绘制代理模式结构图并用面向对象编程语言实现该模式;4. 使用PowerDesigner绘制职责链模式结构图并用面向对象编程语言实现该模式;5. 使用PowerDesigner绘制命令模式结构图并用面向对象编程语言实现该模式;6. 使用PowerDesigner绘制迭代器模式结构图并用面向对象编程语言实现该模式;7. 使用PowerDesigner绘制观察者模式结构图并用面向对象编程语言实现该模式;8. 使用PowerDesigner绘制状态模式结构图并用面向对象编程语言实现该模式;9. 使用PowerDesigner绘制策略模式结构图并用面向对象编程语言实现该模式;10. 使用PowerDesigner绘制模板方法模式结构图并用面向对象编程语言实现该模式。

设计模式大作业实验报告

设计模式大作业实验报告

设计模式⼤作业实验报告蛋糕订购系统⼀、实验介绍(3)⼆、实验环境(3)三、系统流程(3)四、系统总类图(4)五、程序源代码及各个模块⼦类图(5)六、程序运⾏截图(22)七、实验总结(22)⼀、实验介绍本系统使⽤了简单⼯⼚模式、⼯⼚⽅法模式、单例模式、门⾯模式、策略模式、观察者模式⼀共6种模式实现了从蛋糕店订购订购蛋糕的这样⼀个系统。

⼆、实验环境Windows操作系统、MyEclipse10.0、MySQL 5.5、jdk1.6三、系统流程四、系统总类图五、程序源代码及各个模块⼦类图(⼀)测试类Client.java:package net.xsl.ordercake.test;import net.xsl.ordercake.discount.DiscountStyleThree;import net.xsl.ordercake.discount.OrderCake;import net.xsl.ordercake.order.CakeShop;import net.xsl.ordercake.order.EastVilla;import net.xsl.ordercake.order.WestVilla;publicclass Client {publicstaticvoid main (String arg[]){CakeShop starCakeShop = CakeShop.getCakeShop();new WestVilla(starCakeShop, "草莓⽔果"); starCakeShop.getNewName("西13");starCakeShop.notifyCustomer();OrderCake cake = new OrderCake();System.out.println("今⽇促销⼀律8折优惠");cake.setM(8);cake.setStyle(new DiscountStyleThree());cake.setPrice(80) ;System.out.println("本次订购成功完成,需要⽀付的⾦额为"+cake.getMoney(cake.getPrice(),cake.getM())+",原价80"); System.out.println("================================="); new EastVilla(starCakeShop, "甜奶");starCakeShop.getNewName("东18");starCakeShop.notifyCustomer();System.out.println("================================="); starCakeShop.getNewName("东12");starCakeShop.notifyCustomer();}}(⼆)折扣的接⼝和⽅法(策略模式):a)接⼝DiscountStyle.java:package net.xsl.ordercake.discount;publicinterface DiscountStyle {publicdouble disCount(double price,double m);}b)折⽅式⼀DiscountStyleOne.java:package net.xsl.ordercake.discount;publicclass DiscountStyleOne implements DiscountStyle{ publicdouble disCount(double price,double m) {return price;}}c)打折⽅式⼆DiscountStyleTwo.java:package net.xsl.ordercake.discount;publicclass DiscountStyleTwo implements DiscountStyle{publicdouble disCount(double price,double m) {price = price - m;return price;}}d)打着⽅式三DiscountStyleThree.java:package net.xsl.ordercake.discount;publicclass DiscountStyleThree implements DiscountStyle{ publicdouble disCount(double price,double m) { price = price * m/10;return price;}}e)订蛋糕对象类,使⽤了get/set⽅法OrderCake.java:package net.xsl.ordercake.discount;publicclass OrderCake {double money,price;//money是打折后的最终价格,price是原价DiscountStyle style;double m;publicdouble getMoney(double price,double m){return style.disCount(price,m);}publicvoid setPrice(double price){this.price = price ;}publicdouble getPrice(){return price;}publicvoid setStyle(DiscountStyle style){this.style = style ;}public DiscountStyle getStyle(){return style;}publicvoid setM(double m){this.m = m ;}publicdouble getM(){return m;}}(三)顾客向蛋糕订购蛋糕(观察者模式),并在具体主题中使⽤了单例模式a)主题Shop.java:package net.xsl.ordercake.order;publicinterface Shop {publicvoid addCustomer(Customer o);publicvoid deleteCustomer(Customer o);publicvoid notifyCustomer();}b)具体主题(使⽤了单例模式,只能创建⼀个蛋糕商店的对象)CakeShop.java:package net.xsl.ordercake.order;import java.util.ArrayList;publicclass CakeShop implements Shop{String name;boolean changed;ArrayListpersonList;privateint i = 0;privatestatic CakeShop uniqueCakeShop;private CakeShop() {uniqueCakeShop = this;personList = new ArrayList();name = "";changed = false;}publicstaticsynchronized CakeShop getCakeShop(){if(uniqueCakeShop == null){uniqueCakeShop = new CakeShop();}return uniqueCakeShop;}publicvoid addCustomer(Customer o) { if(!(personList.contains(o))) personList.add(o);}publicvoid deleteCustomer(Customer o) { if((personList.contains(o))) personList.remove(o);}publicvoid notifyCustomer() {if(changed){try{Customer customer = personList.get(i); customer.orderCake(name);i++;changed = false;}catch(Exception e){System.out.println("没有新的订购信息"); }}}publicvoid getNewName(String str){if(str.equals(name))changed = false;else{name = str;changed = true;}}}c)观察者Customer.java:package net.xsl.ordercake.order;publicinterface Customer {publicvoid orderCake(String name);}d)体观察者⼀EastVilla.java:package net.xsl.ordercake.order;import net.xsl.ordercake.creator.MakeChocolateCake;import net.xsl.ordercake.creator.MakeFruityCake;import net.xsl.ordercake.creator.MakeMilkCake;import net.xsl.ordercake.jdbc.JDBCFacade;import net.xsl.ordercake.product.ChocolateFactory;import net.xsl.ordercake.product.FruitFactory;import /doc/1410101953.htmlkFactory;publicclass EastVilla implements Customer{Shop shop;private String cakeType;public EastVilla(Shop shop,String cakeType){this.shop = shop;this.cakeType = cakeType;shop.addCustomer(this);}publicvoid orderCake(String name){System.out.println(name+"订了⼀个"+cakeType+"蛋糕");JDBCFacade dbFacade=new JDBCFacade();String sqlStr = "select * from ordercake";String sqlStr1 = "insert into ordercake(cakeType, name, quantity)"+ " VALUES ('"+cakeType+"','"+name+"','1')"; dbFacade.jdbcInsert(sqlStr1);System.out.println("查询插⼊之后新的数据库");dbFacade.jdbcSelect(sqlStr);if(cakeType.equals("草莓⽔果") || cakeType.equals("葡萄⽔果")){MakeFruityCake eastVilla = new MakeFruityCake(cakeType);FruitFactory fruitCake = eastVilla.makeFruityCake();fruitCake.createCake();}elseif(cakeType.equals("⽜奶巧克⼒") || cakeType.equals("⿊巧克⼒")){MakeChocolateCake eastVilla1 = newMakeChocolateCake(cakeType);ChocolateFactory chocolateCake =eastVilla1.makeChocolateCake();chocolateCake.createCake();}elseif(cakeType.equals("双层鲜奶") || cakeType.equals("甜奶")){ MakeMilkCake eastVilla1 = new MakeMilkCake(cakeType); MilkFactory milkCake = eastVilla1.makeMilkCake(); milkCake.createCake();}}}e)具体观察者⼆WestVilla.java:。

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

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

实验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二.总结通过对本课程设计模式的学习,理解了部分模式的结构、优缺点及适用场景,也体会到了老师说的:设计模式不仅仅是编程工具,更是一门“艺术”。

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

最新文件---------------- 仅供参考--------------------已改成-----------word文本 --------------------- 方便更改
赠人玫瑰,手留余香。

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

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

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

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

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

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

绘制该模式的UML图。

3 模式结构图
4 UML类图
5 代码
6运行结果
实验二工厂模式的应用
1 实验目的
1) 掌握工厂模式(Factory)的特点
2) 分析具体问题,使用工厂模式进行设计。

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

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

绘制该模式的UML图。

3 模式结构图
4 UML类图
5 代码
6运行结果
实验三抽象工厂模式的应用
1 实验目的
1) 掌握抽象工厂模式(Abstract Factory)的特点
2) 分析具体问题,使用抽象工厂模式进行设计。

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

绘制该模式的UML图。

3 模式结构图
4 UML类图
5代码
6运行结果df
实验四建造者模式的应用
1 实验目的
1) 掌握建造者模式(Builder)的特点
2) 分析具体问题,使用建造者模式进行设计。

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

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

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

绘制该模式的UML图。

3 模式结构图
4 UML类图
5代码
6运行结果
实验五适配器模式的应用
1 实验目的
1) 掌握适配器模式(Adapter)的特点
2) 分析具体问题,使用适配器模式进行设计。

2 实验内容和要求
一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。

为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。

但合作团队将角度对象绘制函数定为了DrawAngle()。

绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令。

应用适配器模式,用C#控制台应用程序完善该设计。

绘制该模式的UML图。

3模式结构图
4 UML类图
5 代码
6运行结果
实验六桥接模式的应用
1 实验目的
1) 掌握桥接模式(Bridge)的特点
2) 分析具体问题,使用桥接模式进行设计。

2 实验内容和要求
一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。

应用桥接模式,用C#控制台应用程序实现该设计。

绘制该模式的UML图。

3 模式结构图
4 UML类图
5 代码
6 运行结果
实验七装饰模式的应用
1 实验目的
1) 掌握装饰模式(Decorator)的特点
2) 分析具体问题,使用装饰模式进行设计。

2 实验内容和要求
“喜羊羊逃命”游戏:喜羊羊被灰太狼追,喜羊羊最多5条命,灰太狼每咬到喜羊羊一次,喜羊羊就要少一条命。

在逃的过程中喜羊羊可以吃到三种苹果,吃“红苹果”可以给喜羊羊加上保护罩,吃“绿苹果”可以加快喜羊羊奔跑速度,吃“黄苹果”可以使喜羊羊趟着水跑。

应用装饰模式,用C#控制台应用程序实现该设计。

绘制该模式的UML图。

提示:这个例子如果用类的继承来实现的话那可就麻烦了,你需要为喜羊羊派生3*2*1=6个子类(有保护罩的喜羊羊,奔跑速度加快的喜羊羊,会趟水的喜羊羊,既有保护罩又会趟水的喜羊羊,奔跑速度快且会趟水的喜羊羊,有保护罩且奔跑速度快的喜羊羊,有保护罩、奔跑速度快且会趟水的喜羊羊),如果使用装饰模式的那就不用派生诸多子类了,当喜羊羊每吃到一个苹果,我们就用装饰模式给喜羊羊加一个动态增加一个新功能即可。

3 模式结构图
4 UML类图
5 代码
6 运行结果
实验八外观模式的应用
1 实验目的
1) 掌握外观模式(Facade)的特点
2) 分析具体问题,使用外观模式进行设计。

2 实验内容和要求
一个保安系统的,由录像机、电灯、红外线监控和警报器组成。

保安系统的操作人员需要经常将这些仪器启动和关闭。

保安类需要用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象,保安觉得使用不方便。

应用外观模式,用C#控制台应用程序改进该设计。

绘制该模式的UML 图。

3 模式结构图
4 UML类图
5 代码
6 运行结果
实验九观察者模式的应用
1 实验目的
1) 掌握观察者模式(Observer)的特点
2) 分析具体问题,使用观察者模式进行设计。

2 实验内容和要求
网上商店中如果商品(product)在名称(name)、价格(price)等方面有变化,系统能自动通知会员,将是网上商店区别传统商店的一大特色。

如何设计实现?说明你所选择的设计模式,画出类关系图并指明各个类的角色。

应用观察者模式,用C#控制台应用程序改进该设计。

绘制该模式的UML图。

3 模式结构图
4 UML类图
5 代码
6 运行结果
实验十策略模式的应用
1 实验目的
1) 掌握策略模式(Strategy)的特点
2) 分析具体问题,使用策略模式进行设计。

2 实验内容和要求
在图书销售时,根据不同类型的图书有不同的折扣,计算金额时必须区别对待,例如计算机类图书7折,英语类图书6折。

应用策略模式,用C#控制台应用程序实现该设计。

绘制该模式的UML图。

3 模式结构图
4 UML类图
5 代码
6 运行结果
实验十一职责链模式的应用
1 实验目的
1) 掌握职责链模式(Chain of Responsibility)的特点
2) 分析具体问题,使用职责链模式进行设计。

2 实验内容和要求
高校学生请假需要符合学校规定,假如班主任可以批准1天假,系主任可以批准7天假,各学院院长可以批准30天,学校校长可以批准1年。

应用职责链模式,用C#控制台应用程序实现该设计。

绘制该模式的UML图。

3 模式结构图
4 UML类图
5 代码
5 代码
实验十二备忘录模式的应用
1 实验目的
1) 掌握备忘录模式(Memento)的特点
2) 分析具体问题,使用备忘录模式进行设计。

2 实验内容和要求
Window系统可能会异常终止,设计一个系统备份程序。

类WindowsSystem 是发起人角色(Orignation),类Memento是备忘录角色(Memento),类User是备忘录管理角色(Caretaker)。

应用备忘录模式,用C#控制台应用程序实现该设计。

绘制该模式的UML图。

3 模式结构图
4 UML类图
5 代码
6 运行结果
最新文件---------------- 仅供参考--------------------已改成-----------word文本 --------------------- 方便更改
赠人玫瑰,手留余香。

相关文档
最新文档