ImageVerifierCode 换一换
格式:DOC , 页数:116 ,大小:2.15MB ,
资源ID:132989      下载积分:5 金币
已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式实验报告共116页.doc)为本站会员(peixunshi0)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(发送邮件至doc331@126.com或直接QQ联系客服),我们立即给予删除!

设计模式实验报告共116页.doc

1、精选优质文档-倾情为你奉上预备实验 UML建模实验目的:加深对UML建模的理解实验环境:MyEclipse(Java)或Rational Rose等实验内容:1、需求描述A. 某学校准备开发一套选课管理系统,其主要用户是教师和学生。假设教师可以查看课程、增加课程和修改课程;学生可以选修一门或多门课程(为简化起见,学生选修某课程后不允许修改和删除),还能够查看所选修课程的成绩。其中:课程可由课程编号、课程名称进行描述;教师可用工号和姓名进行描述;学生可用学号、姓名进行描述。B. 某信用卡系统账户具有使用状态和冻结状态,其中使用状态又包括正常状态和透支状态两种子状态。如果账户余额小于零则进入透支状

2、态,透支状态时既可以存款又可以取款,但是透支金额不能超过5000元;如果余额大于零则进入正常状态,正常状态时既可以存款又可以取款;如果连续透支100天,则进入冻结状态,冻结状态下既不能存款又不能取款,必须要求银行工作人员解冻。用户可以在使用状态或冻结状态下请求注销账户。根据上述要求,绘制账户类的状态图。2、用例图根据上面的需求描述A,运用UML画出用例图。画图中的用例名和参与者均用中文表示;3、类图根据上面的需求描述A,运用UML画出初始设计类图(仅含业务类),图中应给出属性和方法的中文名称,类与类之间若存在关联,可不确定关联的方向,但需要标出这些关联的多重性。4、状态图根据上面的需求描述B,

3、运用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 Connec

4、tion 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

5、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;pub

6、lic 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 stub LoginForm loginForm = new LoginForm()

7、 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(计算正方形的面积!);pac

8、kage 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

9、 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();现使用单一职责原则对其进行重构。察看:要求编程实现以上二种体系结构,并比较二种实现的差异。package compute.area.draw.improve;public interface

10、IAbstractSquare public void Area();public void Draw();package compute.area.draw.improve;public class figure_Compute_Program implements IAbstractSquare Overridepublic void Area() / TODO Auto-generated method stubSystem.out.println(计算正方形的面积!);Overridepublic void Draw() / TODO Auto-generated method stu

11、bpackage compute.area.draw.improve;public class figure_Draw_Program implements IAbstractSquare Overridepublic void Area() / TODO Auto-generated method stubOverridepublic void Draw() / TODO Auto-generated method stubSystem.out.println(画一个正方形!);实验2 开闭原则与里氏代换原则综合训练实验目的:加深对开闭原则与里氏代换原则的理解(如果你能用配置文件,建议用配置

12、文件解决。)实验环境:C#.Net/VC+.Net或MyEclipse(Java)等实验内容: 1、问题(一)“长方形和正方形“。试写一个求面积与周长的解决方案,要求画UML图并编程实现,并体现出开闭原则与里氏代换原则。IbstractCompute.javapackage desinMode.experiment2.code;/* * * author Author1 * date 2019-04-09 上午11:32:57 * */public abstract class IbstractCompute /计算周长函数public abstract void computePerimet

13、er();/计算面积函数public abstract void computeArea();computeRectangle.javapackage desinMode.experiment2.code;/* * * author Author1 * date 2019-04-09 上午11:46:38 * */public class computeRectangle extends IbstractCompute public void computePerimeter() System.out.println(继承抽象类,实现抽象方法计算长方形的周长(实现开闭原则与里氏代换原则);/计

14、算面积函数public void computeArea() System.out.println(继承抽象类,实现抽象方法计算长方形的面积(实现开闭原则与里氏代换原则);computeSquare.javapackage desinMode.experiment2.code;/* * * author Author1 * date 2019-04-09 上午11:46:45 * */public class computeSquare extends IbstractCompute /计算周长函数public void computePerimeter() System.out.printl

15、n(继承抽象类,实现抽象方法计算正方形的周长(实现开闭原则与里氏代换原则);/计算面积函数public void computeArea() System.out.println(继承抽象类,实现抽象方法计算正方形的面积(实现开闭原则与里氏代换原则);mainClass.javapackage desinMode.experiment2.code;/* * * author Author1 * date 2019-04-09 上午11:46:57 * */public class mainClass public static void main(String args) / TODO Aut

16、o-generated method stubIbstractCompute ibstractCompute = null;/开闭原则与里氏代换原则 正方形ibstractCompute = new computeSquare();ibstractCputePerimeter();ibstractCputeArea();/开闭原则 与里氏代换原则长方形 ibstractCompute = new computeRectangle(); ibstractCputePerimeter();ibstractCputeArea(); 2、问题(二)“士兵用枪杀敌”UML图理解与编程实现 ()CS游戏中

17、的枪械类图Client.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:02:30 * */public class Client public static void main(String args) / TODO Auto-generated method stubAbstractGun abstractGun1 = new Handgun();AbstractGun abstractGun2 = new Rifle();AbstractGun abstra

18、ctGun3 = new Machinegun();Soldier soldier = new Soldier();soldier.killEnemy(abstractGun1);soldier.killEnemy(new Rifle();soldier.killEnemy(new Machinegun(); Soldier.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:03:06 * */public class Soldier public void kil

19、lEnemy(AbstractGun abstractGun) System.out.print(士兵用);abstractGun.shoot();System.out.println(杀死敌人);AbstractGun.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:02:46 * */public abstract class AbstractGun public abstract void shoot();Handgun.javapackage desinM

20、ode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午10:49:20 * */public class Handgun extends AbstractGun public void shoot() System.out.print(手枪);Machinegun.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:02:54 * */public class Machinegun e

21、xtends AbstractGun public void shoot() System.out.print(机械枪);Rifle.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:03:00 * */public class Rifle extends AbstractGun public void shoot() System.out.print(步枪);()如果我们有一个玩具手枪,该如何定义呢?先在上图增加一个类ToyGun,然后继承于AbstractGun

22、类Client.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:02:30 * */public class Client public static void main(String args) / TODO Auto-generated method stubAbstractGun abstractGun1 = new Handgun();AbstractGun abstractGun2 = new Rifle();AbstractGun abstractGu

23、n3 = new Machinegun();Soldier soldier = new Soldier();soldier.killEnemy(abstractGun1);soldier.killEnemy(new Rifle();soldier.killEnemy(new Machinegun(); soldier.killEnemy(new Toygun();Toygun.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:13:59 * */public cla

24、ss Toygun extends AbstractGun public void shoot() System.out.print(玩具枪);()具枪与真实枪分离的类图Client.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:02:30 * */public class Client public static void main(String args) / TODO Auto-generated method stubAbstractGun abstra

25、ctGun1 = new Handgun();AbstractGun abstractGun2 = new Rifle();AbstractGun abstractGun3 = new Machinegun();Soldier soldier = new Soldier();soldier.killEnemy(abstractGun1);soldier.killEnemy(new Rifle();soldier.killEnemy(new Machinegun(); Soldier.javapackage desinMode.experiment2.question_2;/* * * auth

26、or Author1 * date 2019-04-13 上午11:03:06 * */public class Soldier public void killEnemy(AbstractGun abstractGun) System.out.print(士兵用);abstractGun.shoot();System.out.println(杀死敌人);AbstractGun.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:02:46 * */public ab

27、stract class AbstractGun public abstract void shoot();Handgun.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午10:49:20 * */public class Handgun extends AbstractGun public void shoot() System.out.print(手枪);Machinegun.javapackage desinMode.experiment2.question_2;

28、/* * * author Author1 * date 2019-04-13 上午11:02:54 * */public class Machinegun extends AbstractGun public void shoot() System.out.print(机械枪);Rifle.javapackage desinMode.experiment2.question_2;/* * * author Author1 * date 2019-04-13 上午11:03:00 * */public class Rifle extends AbstractGun public void sh

29、oot() System.out.print(步枪);AbstractToyGun.javapackage desinMode.experiment2.question_2;public abstract class AbstractToyGun public abstract void toyShoot(AbstractGun abstractGun);Toygun2.javapackage desinMode.experiment2.question_2;public class Toygun2 extends AbstractToyGunpublic void toyShoot(Abst

30、ractGun abstractGun) abstractGun.shoot();System.out.println(玩具枪);实验3 依赖倒转原则与开闭原则的综合训练实验目的:加深对依赖倒转原则与开闭原则的理解实验环境:C#.Net/VC+.Net或MyEclipse(Java)等实验内容:1、依赖倒置原则的理解所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体。简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。 面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变化时,上层也要跟着变化

31、这就会导致模块的复用性降低而且大大提高了开发的成本。面向对象的开发很好的解决了这个问题,一般的情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变化,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序域实现细节的耦合度。2、问题优化UML图与编程实现 ()一个汽车电子公司现在规划开发一个自动驾驶系统,只要汽车上安装上这个系统,就可以实现无人驾驶,该系统可以在福特车系列和本田车系列上使用。初始设计如下:实现代码如下:public class HondaCar public void Run() Console.WriteLine(本田车启动了!);

32、public void Turn() Console.WriteLine(本田车拐弯了!); public void Stop() Console.WriteLine(本田车停止了!); public class FordCar public void Run() Console.WriteLine(福特车启动了!); public void Turn() Console.WriteLine(福特车拐弯了!); public void Stop() Console.WriteLine(福特车停止了!); public class AutoSystem public enum CarType F

33、ord,Fonda private HondaCar hondcar=new HondaCar(); private FordCar fordcar=new FordCar(); private CarType type; public AutoSystem(CarType carType) this.type = carType; public void RunCar() if (this.type = CarType.Fonda) hondcar.Run(); else if (this.type = CarType.Ford) fordcar.Run(); public void Sto

34、pCar() if (this.type = CarType.Fonda) hondcar.Stop(); else if (this.type = CarType.Ford) fordcar.Stop(); public void TurnCar() if (this.type = CarType.Fonda) hondcar.Turn(); else if (this.type = CarType.Ford) fordcar.Turn(); AutoSystem.javapackage designPattern.experiment3.code;public class AutoSyst

35、em public enum CarType Ford,Fonda private HondaCar hondcar=new HondaCar(); private FordCar fordcar=new FordCar(); private CarType type; / CarType carType / / AutoSystem public AutoSystem(CarType carType) this.type = carType; public void RunCar() if (this.type = CarType.Fonda) hondcar.Run(); else if

36、this.type = CarType.Ford) fordcar.Run(); public void StopCar() if (this.type = CarType.Fonda) hondcar.Stop(); else if (this.type = CarType.Ford) fordcar.Stop(); public void TurnCar() if (this.type = CarType.Fonda) hondcar.Turn(); else if (this.type = CarType.Ford) fordcar.Turn(); public static void

37、 main(String args) / TODO Auto-generated method stubAutoSystem autoSystem = new AutoSystem(CarType.Fonda);autoSystem.RunCar();autoSystem.TurnCar();autoSystem.StopCar();AutoSystem autoSystem1 = new AutoSystem(CarType.Ford);autoSystem1.RunCar();autoSystem1.TurnCar();autoSystem1.StopCar(); HondaCar.jav

38、apackage designPattern.experiment3.code;import java.io.Console;public class HondaCar public void Run() System.out.println(本田车启动了!); public void Turn() System.out.println(本田车拐弯了!); public void Stop() System.out.println(本田车停止了!); FordCar.javapackage designPattern.experiment3.code;public class FordCar public void Run() System.out.println(福特启动了!); public void Turn() System.out.println(福特车拐弯了!); public void Stop() System.out.println(福特车停止了!); 但,如果现在公司业务规模扩大了,该自动驾驶系统还要把吉普车也兼容了。如何修改这个设计?这些就需要修改AutoSystem类如下:public class AutoSy

宁ICP备18001539号-1