设计模式大作业-蛋糕预定系统实验报告.docx_第1页
设计模式大作业-蛋糕预定系统实验报告.docx_第2页
设计模式大作业-蛋糕预定系统实验报告.docx_第3页
设计模式大作业-蛋糕预定系统实验报告.docx_第4页
设计模式大作业-蛋糕预定系统实验报告.docx_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

蛋糕订购系统蛋糕订购系统一、 实验介绍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;public class Client public static void 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;public interface DiscountStyle public double disCount(double price,double m);b) 折方式一DiscountStyleOne.java:package net.xsl.ordercake.discount;public class DiscountStyleOne implements DiscountStylepublic double disCount(double price,double m) return price;c) 打折方式二DiscountStyleTwo.java:package net.xsl.ordercake.discount;public class DiscountStyleTwo implements DiscountStylepublic double disCount(double price,double m) price = price - m;return price;d) 打着方式三DiscountStyleThree.java:package net.xsl.ordercake.discount;public class DiscountStyleThree implements DiscountStylepublic double disCount(double price,double m) price = price * m/10;return price;e) 订蛋糕对象类,使用了get/set方法OrderCake.java:package net.xsl.ordercake.discount;public class OrderCake double money,price;/money是打折后的最终价格,price是原价DiscountStyle style;double m;public double getMoney(double price,double m)return style.disCount(price,m); public void setPrice(double price)this.price = price ;public double getPrice()return price;public void setStyle(DiscountStyle style)this.style = style ;public DiscountStyle getStyle()return style;public void setM(double m)this.m = m ;public double getM()return m;(三) 顾客向蛋糕订购蛋糕(观察者模式),并在具体主题中使用了单例模式a) 主题Shop.java:package net.xsl.ordercake.order;public interface Shop public void addCustomer(Customer o);public void deleteCustomer(Customer o);public void notifyCustomer();b) 具体主题(使用了单例模式,只能创建一个蛋糕商店的对象)CakeShop.java:package net.xsl.ordercake.order;import java.util.ArrayList;public class CakeShop implements ShopString name;boolean changed;ArrayListpersonList;private int i = 0;private static CakeShop uniqueCakeShop;private CakeShop() uniqueCakeShop = this;personList = new ArrayList();name = ;changed = false;public static synchronized CakeShop getCakeShop()if(uniqueCakeShop = null)uniqueCakeShop = new CakeShop();return uniqueCakeShop;public void addCustomer(Customer o) if(!(personList.contains(o)personList.add(o);public void deleteCustomer(Customer o) if(personList.contains(o)personList.remove(o);public void notifyCustomer() if(changed)tryCustomer customer = personList.get(i);customer.orderCake(name);i+;changed = false;catch(Exception e)System.out.println(没有新的订购信息);public void getNewName(String str)if(str.equals(name)changed = false;elsename = str;changed = true;c) 观察者Customer.java:package net.xsl.ordercake.order;public interface Customer public void 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 duct.ChocolateFactory;import duct.FruitFactory;import duct.MilkFactory;public class EastVilla implements CustomerShop shop;private String cakeType;public EastVilla(Shop shop,String cakeType)this.shop = shop;this.cakeType = cakeType;shop.addCustomer(this);public void 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();else if(cakeType.equals(牛奶巧克力) | cakeType.equals(黑巧克力)MakeChocolateCake eastVilla1 = new MakeChocolateCake(cakeType);ChocolateFactory chocolateCake = eastVilla1.makeChocolateCake();chocolateCake.createCake();else if(cakeType.equals(双层鲜奶) | cakeType.equals(甜奶)MakeMilkCake eastVilla1 = new MakeMilkCake(cakeType);MilkFactory milkCake = eastVilla1.makeMilkCake();milkCake.createCake(); e) 具体观察者二WestVilla.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 duct.ChocolateFactory;import duct.FruitFactory;import duct.MilkFactory;public class WestVilla implements CustomerShop shop;private String cakeType;public WestVilla(Shop shop,String cakeType)this.shop = shop;this.cakeType = cakeType;shop.addCustomer(this);public void 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 westVilla = new MakeFruityCake(cakeType);FruitFactory fruitCake = westVilla.makeFruityCake();fruitCake.createCake();else if(cakeType.equals(牛奶巧克力) | cakeType.equals(黑巧克力)MakeChocolateCake westVilla1 = new MakeChocolateCake(cakeType);ChocolateFactory chocolateCake = westVilla1.makeChocolateCake();chocolateCake.createCake();else if(cakeType.equals(双层鲜奶) | cakeType.equals(甜奶)MakeMilkCake westVilla1 = new MakeMilkCake(cakeType);MilkFactory milkCake = westVilla1.makeMilkCake();milkCake.createCake(); (四) JDBC(门面模式)JDBCFacade.java:package net.xsl.ordercake.jdbc;import java.sql.Connection; import java.sql.DriverManager;import java.sql.ResultSet; import java.sql.ResultSetMetaData;import java.sql.SQLException; import java.sql.Statement; public class JDBCFacade Connection conn = null; Statement stmt = null; ResultSet rs = null; String sqlStr = ; public void createStatement() try stmt = conn.createStatement(); catch (SQLException e) e.printStackTrace(); public ResultSet jdbcSelect(String sqlStr) this.sqlStr = sqlStr; getConnection(); createStatement(); try rs = stmt.executeQuery(sqlStr); ResultSetMetaData rsmd = rs.getMetaData(); int j = 0; j = rsmd.getColumnCount(); while(rs.next() for(int i=0;ij;i+) System.out.print(rs.getString(i+1); System.out.print(t); System.out.println(); catch (SQLException e) e.printStackTrace(); return rs; public void jdbcUpdate(String sqlStr) this.sqlStr = sqlStr; getConnection(); createStatement(); try int count = stmt.executeUpdate(sqlStr); System.out.println(表更新 + count + 条数据); catch (SQLException e) System.out.println(更新数据失败); public void jdbcInsert(String sqlStr) this.sqlStr = sqlStr; getConnection(); createStatement(); try int count = stmt.executeUpdate(sqlStr); System.out.println(向表插入 + count + 条数据); catch (SQLException e) System.out.println(插入数据失败 + e.getMessage(); public void jdbcDelete(String sqlStr) this.sqlStr = sqlStr; getConnection(); createStatement(); try int count = stmt.executeUpdate(sqlStr); System.out.println(向表删除 + count + 条数据); catch (SQLException e) System.out.println(删除数据失败); public void jdbcClose() try rs.close(); stmt.close(); conn.close(); catch (SQLException e) e.printStackTrace(); public Connection getConnection() try Class.forName(com.mysql.jdbc.Driver); conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/cakeshop,root,admin); catch (Exception e) System.out.println(数据库连接失败 + e.getMessage(); return conn; (五) 构造蛋糕(工厂方法模式):a) 构造者MakeCake.java:package net.xsl.ordercake.creator;public interface MakeCake b) 具体构造者一MakeChocolateCake.java:package net.xsl.ordercake.creator;import duct.ChocolateFactory;public class MakeChocolateCake implements MakeCakeprivate String cakeType;public MakeChocolateCake(String cakeType)this.cakeType = cakeType;public ChocolateFactory makeChocolateCake()return new ChocolateFactory(cakeType);c) 具体构造者二MakeFruityCake.java:package net.xsl.ordercake.creator;import duct.FruitFactory;public class MakeFruityCake implements MakeCakeprivate String cakeType;public MakeFruityCake(String cakeType)this.cakeType = cakeType;public FruitFactory makeFruityCake()return new FruitFactory(cakeType);d) 具体构造者三MakeMilkCake.java:package net.xsl.ordercake.creator;import duct.MilkFactory;public class MakeMilkCake implements MakeCakeprivate String cakeType;public MakeMilkCake(String cakeType)this.cakeType = cakeType;public MilkFactory makeMilkCake()return new MilkFactory(cakeType);e) 抽象产品Factory.java:package duct;public interface Factory public void createCake();f) 具体产品一FruitFactory.java:package duct;public class FruitFactory implements Factoryprivate String cakeType;public FruitFactory(String cakeType)this.cakeType = cakeType;public void createCake()tryif (cakeType.equals(草莓水果)FruityCake strawberryCake = new StrawberryCake();strawberryCake.show();else if (cakeType.equals(葡萄水果) FruityCake grapeCake = new GrapeCake();grapeCake.show(); catch (Exception e) System.out.println(制作+cakeType+蛋糕失败); g) 具体产品二MilkFactory.java:package duct;public class MilkFactory implements Factoryprivate String cakeType;public MilkFactory(String cakeType)this.cakeType = cakeType;public void createCake()tryif (cakeType.equals(双层鲜奶)MilkCake doubleMilkCake = new DoubleMilkCake();doubleMilkCake.show();else if (cakeType.equals(甜奶) MilkCake sweetMilkCake = new SweetMilkCake();sweetMilkCake.show(); catch (Exception e) System.out.println(制作+cakeType+蛋糕失败); h) 具体产品三ChocolateFactory.java:package duct;public class ChocolateFactory private String cakeType;public ChocolateFactory(String cakeType)this.cakeType = cakeType ;public void createCake()tryif (cakeType.equals(牛奶巧克力)ChocolateCake milkChocolateCake = new MilkChocolateCake();milkChocolateCake.show();else if (cakeType.equals(黑巧克力) ChocolateCake darkChocolateCake = new DarkChocolateCake();darkChocolateCake.show(); catch (Exception e) System.out.println(制作+cakeType+蛋糕失败); (六) 蛋糕工厂(简单工厂模式):a) 水果蛋糕:i. FruitFactory.java(第五项构造蛋糕中已贴出):ii. 接口类FruityCake.java:package duct;public interface FruityCake public void show();iii. 实现接口:StrawberryCake.java:package duct;public class StrawberryCake im

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论