山东建筑大学实验报告
课 程 :Java面向对象程序设计语言
院 (部):商学院
专 业 :电子商务
班 级 :
学生姓名:
学 号:
指导教师:陈明志
完成时间:2014年6月
目录
实验一:JDK安装与配置... 3
实验二:Java基本语法练习... 4
实验三:数组和字符串练习... 5
实验四:类和对象程序设计... 6
实验五:接口、内部类与包练习... 7
实验六:图形界面设计... 8
实验七:线程设计... 9
实验八:输入输出流设计... 10
实验九:Applet编程... 10
实验十: 网络程序设计... 10
实验一:JDK安装与配置
一、实验目的及任务
熟悉Java开发环境JDK,下载并安装JDK软件,熟悉JDK配置环境,掌握在JDK环境中编辑、编译和运行程序的操作。
二、实验环境
与因特网连接的计算机网络系统;主机操作系统为Windows2000或Windows XP。
三、实验步骤
1、从网上下载最新JDK开发包,并对其进行安装,并配置JDK的path和classpath环境变量。
2、从网上下载JDK相应的帮助文档,解压该文档并熟悉该文档使用。
3、下载UltraEdit或者TextPad、EditPlus,并安装你所下载的软件,熟悉该软件的编辑环境。
4、使用你所下载的编辑软件,编写如下程序:
public class Hello{
public static void main(String args[]){
System.out.println(“Hello”);
}
}
并将该程序保存为Hello.java文件,保存到d:\myjava目录下。
5、对上述编写的程序进行编译和运行,在实验报告纸上写明编译和运行的过程,以及最后所运行的结果。
四、实验报告内容
1、在实验报告纸上写明下载的JDK版本名称,下载JDK的网址,以及所配置的path和classpath环境变量。
2、在实验报告纸上写明Java程序编译和运行的过程,以及步骤4的最后所运行的结果。
1. JDK版本名称:jdk1.6.0_43
Path的环境变量 C:\ProgramFiles\NVIDIA Corporation\PhysX\Common;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Java\jdk1.6.0_43\bin
classpath环境变量。.;C:\Program Files\Java\jdk1.6.0_43\lib
2.打开TextPad,将新建文件定为java类型,输入步骤4的程序,在H盘中新建一个文件夹为wmy,j将“Hello”文件存到wmy文件夹中并保存,在命令提示符中输入以下指令:H:回车,cd空格wmy回车,javac空格Hello.java回车。运行结果是错误的,出现了非法字符,需要在英文半角状态下输入双引号,改完后输出结果正确。
实验二:Java基本语法练习
一、实验目的及任务
熟悉Java程序结构,掌握基本数据类型的使用方法,熟练运用分支、循环的使用方法。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、使用Java编辑软件验证教材例题,参照教材对例题进行编写、编译并执行。
2、课下在实验报告纸上编写以下程序,并在上机课时编译并执行你所编写的程序,将编译及执行结果写在实验报告纸上。
1)设i是一个整数类型变量,写出下列问题对应的程序。
(1)判断i为奇数或偶数;
(2)判断i的值是否在0~9之间。
2)设ch是一个字符变量,写出下列问题对应的程序。
(1)判断ch是一个十进制的数字字符;
(2)判断ch是一个英文字母,不论大写或者小写;
(3)将一个十进制的数字字符ch转换成对应的整数类型值。
3、输出下列数字形式:
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
四、实验报告内容
1、步骤2中所编写的程序,并将执行结果写在实验报告纸上。
实验三:数组和字符串练习
一、实验目的及任务
掌握Java数组、字符串的使用。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、使用Java编辑软件验证教材例题,参照教材对例题进行编写、编译并执行。
2、课下在实验报告纸上编写以下程序,并在上机课时编译并执行你所编写的程序,将编译及执行结果写在实验报告纸上。
1)设一个一维数组的元素值为:7 4 8 9 1 5,请输出具有以下内容的方阵:
2)找出两个字符串中所有共同的字符。
3)读入一个字符串str,判断其是否为标识符。
3、提高练习。
根据题意边思考边将程序使用Java编辑软件编写出来。
题意:读入一个浮点数值,将其转化为中文金额的大写方式,如123.45,转化为:壹佰贰拾叁元肆角伍分。
编写程序实现题意并调试通过,针对以下多种数据情况下进一步完善程序。
1)当金额为整数时,只表示整数部分,省略小数部分,并添加“整”字。如123表示为壹佰贰拾叁元整。
2)当金额中含有连续的0时,只需写一个“零”即可。例如,10005表示为:壹万零伍元整。
3)10的表示方式。例如,110表示为:壹佰一拾元整,而10表示为拾元整。
金额的中文大写方式。
四、实验报告内容
1、步骤2、3中所编写的程序及其编译及执行结果写在实验报告纸上。
实验四:类和对象程序设计
一、实验目的及任务
理解面向对象封装性、继承性和多态性的基本概念,掌握声明类、封装类、继承类以及运行时多态性的实现方法。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、使用Java编辑软件验证教材例题,参照教材对例题进行编写、编译并执行。
2、课下在实验报告纸上编写以下程序,并在上机课时编译并执行你所编写的程序,将编译及执行结果写在实验报告纸上。
1)定义一个类People,成员变量有姓名、出生日期、性别、身高、体重等,成员方法有计算年龄,并创建该类的对象。
2)设已有类声明如下:
public class Date1
{
int year, month, day;
public void tomorrow() { }
public void yestoday() { }
}
请写出实现其中tomorrow()方法和yestoday()方法的代码。
3)设计Number类
(1)设计一个类Number1,有一个方法:求n的阶乘。
(2)设计一个类Number2 ,它是Number1的子类,它有一个方法:求1+2+3+…+n。
3、提高练习。
根据题意边思考边将程序使用Java编辑软件编写出来。
题意:设计银行账户类及存取款操作方法。设计一个银行账户类,其中包括:
1)账户信息:账号、姓名、开户时间、身份证号码等。
2)存款方法。
3)取款方法。
银行账户类声明为public,其中的成果变量声明为private,方法声明为public。
四、实验报告内容
1、步骤2、3中所编写的程序及其编译及执行结果写在实验报告纸上。
实验五:接口、内部类与包练习
一、实验目的及任务
掌握Java面向对象的高级特性,理解和实现接口的类的关系,掌握一个类实现多个接口的声明和使用方法,理解java包机制的作用,熟悉Java常用包中类。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
根据题意边思考边将程序使用Java编辑软件编写出来。
1.设计圆柱体和圆锥体类
基于教材例题设计圆柱体和圆锥体类,分别实现立体图形接口,计算表面积和体积。
2. 将Person1类的成员变量改为出生日期,再设计age()方法求年龄。
四、实验报告内容
将所编写的程序及其编译及执行结果写在实验报告纸上,在实验报告纸上写明如何自定义包并引用自定义包。
实验六:图形界面设计
一、实验目的及任务
掌握Java Swing组件的使用方法,理解委托事件处理模型,掌握多种布局方式,掌握窗口菜单和快捷菜单设计方式,设计出具有图形用户界面、能够响应试件的Java应用程序。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、使用Java编辑软件验证教材例题,参照教材对例题进行编写、编译并执行。
2、计算器设计
题意:请设计并实现Windows系统中“计算器”的窗口及功能,如图所示。
实验要求:
1)设计图形界面添加菜单
窗口上添加各种组建及菜单,并处理组件及菜单的事件监听程序。
2)运算
实现多种运算,保证运算正确性。
四、实验报告内容
使用电子邮件的方式将所编写步骤2的程序发送到教师电子邮箱,邮箱主题写明是“Java实验六”
实验七:线程设计
一、实验目的及任务
理解线程概念,掌握创建、管理和控制Java线程对象的方法,包括创建Java线程对象、改变线程状态、设置线程优先级以控制线程调度等方法,了解并执行的多线程间存在的各种不同关系,掌握实现线程互斥和线程同步的方法。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、使用Java编辑软件验证教材例题,参照教材对例题进行编写、编译并执行。
2、倒计时牌设计
题意:设计一个数字化的倒计时牌,计时单位可以是秒、分或者天等。
四、实验报告内容
步骤2中所编写的程序及其编译及执行结果写在实验报告纸上。
实验八:输入输出流设计
一、实验目的及任务
要求深入理解文件和流的概念,理解流在文件操作中的作用,掌握基本流类的使用方法,掌握文件操作的基本方法,熟悉在对象之间通过流传输数据的方法。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、使用Java编辑软件验证教材例题,参照教材对例题进行编写、编译并执行。
2、设计一个电话号码薄的应用程序,保存若干人的电话号码,要求具有图形用户界面。
四、实验报告内容
将所编写程序以电子邮件的方式发送到任课教师的电子邮箱中,主题写明“实验八作业”。
实验九:Applet编程
一、实验目的及任务
掌握Applet应用程序的设计方法,熟悉HTML语言及其中的Applet标签,理解Applet应用程序运行原理,理解Applet的各种状态及变化条件,熟悉使用与Applet状态改变有关的方法实现对Applet的控制,熟练使用线程技术实现Applet的动态效果。。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、在Applet上滚动显示文字、绘制图形、移动图像、切换图像、设计动画。
(1)滚动显示文字:将一段指定文字在Applet中滚动显示。
(2)绘制图形:将四叶玫瑰线等图形绘制在Applet上。
(3)移动图像:选择一幅图像在Applet上显示一段时间,改变位置后再显示,形成图像在Applet上移动的效果。
(4)切换图像:选择两幅图像,通过线程控制交替显示在Applet上。
四、实验报告内容
将所编写程序以电子邮件的方式发送到任课教师的电子邮箱中,主题写明“实验八作业”。
实验十: 网络程序设计
一、实验目的及任务
掌握Java网络程序设计原理。
二、实验环境
主机操作系统为Windows2000或Windows XP,已经配置好的JDK及Java编辑软件UltraEdit、Editplus或者TextPad等软件中一种或多种。
三、实验步骤
1、使用Java编辑软件验证教材例题,参照教材对例题进行编写、编译并执行。
2、以Socket方式发送与接收邮件
题意:设计界面,以Socket及数据流方式发送与接收邮件。
四、实验报告内容
第二篇:面向对象技术实验指导书
前言
《面向对象技术》是计算机技术、软件及网络专业的一门理论性较强的专业课,旨在培养大学生的计算机专业素质和运用典型模式进行程序设计的能力。通过实验教学,使学生加深对所学知识的理解,掌握典型模式的实现技术。它的目的和任务是:让学生了解模式在构件复杂系统过程中所处的角色,培养学生的针对特定应用问题使用适当的模式进行设计的能力。
本实验指导书是(美)Alan Shalloway&James R.Trott著,熊节译的《设计模式精解》的配套教材。编者根据计算机课程的实践性强等特点,编写了本实验教程,帮助学生有计划地系统地上机实践。
根据教学内容和教学目标,实验指导书设计了八个实验,实验学时16学时,每个实验2学时。学生应按照实验指导书的要求,完成指定的实验任务,并及时提交实验报告。要求学生在每次实验之前做好预习,实验后按要求写出实验报告。在每次实验过程中教师要考核学生每次实验的完成情况。
一、为保证实验效果学生应做到:
1、遵守实验室的规章制度,爱护教学设备。
2、学生必须按时上机下机。
3、禁止做与实验无关的内容,禁止利用实验学时玩计算机游戏;
4、每次实验前学生应做好预习,实验后按时提交实验报告。
二、 实验报告的要求:
1、明确实验的目的及要求;
2、记录下运用相应模式的程序设计的思想、程序代码及运行的结果;
3、说明实验中出现的问题和解决过程;
4、写出实验的体会和实验过程中没解决的问题。
《面向对象技术》实验指导书是计算机科学与工程学院科学系李桂丽、李迎春老师集体编写而成,书中难免有错,敬请批评指正。
辽宁科技大学软件学院软件工程系
20##年8月
实验一 面向对象程序设计
一、 实验目的:
通过本次实验,使学生熟悉C++/JAVA语法,并运用面向对象基本技术实现程序设计,包括类的继承,对象之间的关系,提高面向对象程序设计的技能。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
(1)编写一个统计动物种类的程序。练习应用类的继承,加深理解继承的概念。
首先声明一个名为Animal(动物)的基类,然后再创建两个派生类,一个是Mammal(哺乳动物),Bird(鸟类)。
子类Mammal含有子女数和读取子女数的成员函数NumOffspring();子类Bird含有生蛋数、是否筑巢,及取生蛋的成员函数GetEggs()。成员函数ShowMannal()和ShowBird()的功能是分别输出各自的对象参数。
Animal Bird类的定义如下:
Class Animal
{
Public:
Animal(const char *s){strncpy(name,s,29);}//构造函数
Const char * GetName(){return name;} //取动物的名称
Private:
Char name[30];// 动物的名称
}
Mammal类的定义如下:
Class Mammal:public Animal //继承了Animal类
{
public:
Mammal(const char *s,int nc):Animal(s){offspring=nc;}// 构造函数
int NumOffspring(){return offspring;}//取子女数目函数
void ShowMammal();//输出对象的参数
private:
int offspring;//记录哺乳动物子女的数目
};
Bird类的定义如下:
Class Bird:public Animal//继承了Animal类
{
Public:
Bird(const char *s,int ne,int nests);// 构造函数
int GetEggs(){return eggs;}//取生蛋数目
const char* BuildNest();//判断是否筑巢
void ShowBird();//输出Bird类对象的参数
private:
int eggs ; //生蛋数
int nesting; ; //若筑巢则为真
};
(2)要建立一个简单的微波炉系统,这个微波炉有两个按钮:烹饪按钮和取消按钮,在按下烹饪按钮后,微波炉工作1分钟。如果在正在烹饪时按下烹饪按钮,烹饪时间就增加1分钟。在任何时候按下取消按钮都会停止烹饪。
下面是一些初始系统的特定要求:
1、 微波炉正在烹饪时,微波炉里的灯必须亮着,在打开炉门时,灯依然要亮。其余时间,灯都必须要关着。
2、 仅在关炉门时对烹饪进行初始化。
3、 通过按烹饪按钮对烹饪进行初始化。按一次微波炉能工作1分钟。
4、 在微波炉工作时按烹饪按钮,能延长1分钟的工作时间,在工作期间,人们可根据需要的时间,按相应次数的烹饪按钮。
5、 在微波炉完成工作时,关掉功率管和灯。然后微波炉通过鸣叫三声通知厨师。
6、 在微波炉正工作时,打开炉门会中断工作,同时清除剩余时间,并且微波炉也不鸣叫。
7、 在微波炉正工作时,按取消按钮会停止工作,同时关灯并清除剩余时间。对这样的中断,微波炉不发出三声鸣叫。
8、 每次按取消按钮或烹饪按钮都会发出一声鸣叫,以使厨师知道微波炉已经接收了本次按按钮操作。
9、 如果在炉门打开时按下烹饪按钮,除了发出一声鸣叫,什么也不会发生。
10、 如果在微波炉不工作时按下取消按钮,除了发出一声鸣叫,什么也不会发生。
11、 微波炉不需要显示烹饪时间。
分析需求,运用模式的思想编写程序实现。
注:(1)必须完成,(2)可以选做
实验二外观模式的运用
一、 实验目的:
通过本次实验,使学生运用外观模式的思想与方法,编写程序。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
(1)家庭篇案例
今年十一国庆节,我呆在家里美美的享受了一下家的温馨。首先让我来介绍一下我的家庭成员:
妻子(Wife)
女儿(Daughter)
我(Me)
我们都是家庭(Family)的一分子,我们是以家庭对外的。就象我们国家对外是以“中国”,外国人都称我们是中国人,但在中国这个大家庭内部,包括了汉、回、蒙 …… 等56个民族一样。
可见对外我们是要以统一的身份,或叫统一的外观(Facade)进行展现。
1、 在这里,先定义家庭的各个成员类:
妻子(Wife):
public class Wife {
protected Wife() {
System.out.println("妻子美丽 !");
}
}
女儿(Daughter):
public class Daughter {
protected Daughter () {
System.out.println("女儿可爱 !");
}
}
我(Me):
public class Me {
protected Me() {
System.out.println("我爱我家 !");
}
}
2、定义家庭对外展现(FamilyOutShow)类:
public class FamilyOutShow {
public void MyFamily() {
Wife myWife = new Wife(); //我的妻子
Daughter myDaughter = new Daughter (); //我的女儿
Me me= new Me(); //我自己
}
}
3、编写测试类:
public class MyFamilyTest {
public static void main(String[] args) {
FamilyOutShow myFamily = new FamilyOutShow ();
myFamily.MyFamily();
}
}
4、说明:
A:Facade的定义: 为子系统中的一组接口提供一个一致的界面。
B:使用统一对外接口,可以降低系统的复杂性,增加了灵活性。
C:从例子中可以看到,外界只是访问了家庭对外展现(FamilyOutShow)类,而没有直接与成员类打交道。这样比如说增加了一个新的成员类(比如说儿子(Son)类),只要修改家庭对外展现(FamilyOutShow)类即可,而不用修改调用。
(2)医院案例
如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。
首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴款,才能到化验部门做化验。化验后,再回到门诊室。
解决这种不便的方法便是引进门面模式。可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员负责与医院的各个部门打交道。
注:(1)必须完成,(2)可以选做
实验三 适配器模式的运用
一、 实验目的:
通过本次实验,使学生运用适配器模式的思想与方法,编写程序。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
(1)适配器模式与小美和小芳的故事
小美和小芳是好朋友,两人都喜欢三件事情:美食、购物、旅游,但是这三件事情都是小芳母亲最厌恶的,她希望自己的女儿能做两件事情:读书、练字,可是姑娘一听见这些东西就头痛。小美和小芳约定好暗号,出门的时候要说母亲爱听的,实际上做的是姑娘们爱做的,说一套做一套,这样两个人就可以搞定了。暗号如下:
Reading:老母亲以为是去读书,实际上出了门就去 Eating 和 Shopping 了
Writing:老母亲以为是去练字,实际上出了门就去 Travelling 了。
这套暗号约定实际上就是个适配器。它把对外的接口从姑娘们希望的 Eating 、Shopping 、Travelling 变成了母亲希望的 Reading 和 Writing ,这样就可以顺利通过母亲这一关了;但实际上做的还是姑娘希望的 Eating 、Shopping 、Travelling。事情从表面上看是一回事,实际上内部的实现可能是另一回事。最后当然是姑娘们胜利了。
下面我们用代码来讲述这个故事吧:
Adapter.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Adapter
...{
//姑娘希望的接口:但是由于母亲不喜欢这些东西,不能直接使用了
public class Girl
...{
public void Eating()
...{
System.Console.WriteLine("不用装样子了,我要吃大闸蟹!");
System.Console.WriteLine();
}
public void Shopping()
...{
System.Console.WriteLine("不用装样子了,买一件今年最流行的小背心!");
System.Console.WriteLine();
}
public void Travelling()
...{
System.Console.WriteLine("不用装样子了,千山是个不错的地方哦!");
System.Console.WriteLine();
}
}
//母亲希望的接口:要想约小芳出来,必须告诉母亲,我们是去做您喜欢的事情去了
public interface Mother
...{
void Reading();
void Writing();
}
//小美和小芳的约定,精髓就是客户喜欢什么就让他看见什么,实际上做的还是原来的那一套东西。
public class Agreement : Mother
...{
Girl girl = new Girl();
//说的是去读书,那是给母亲(客户端)看的,实际上呢?
public void Reading()
...{
girl.Eating();
girl.Shopping();
}
public void Writing()
...{
girl.Travelling();
}
}
}
客户端:Client.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Adapter
...{
class Client
...{
static void Main(string[] args)
...{
Agreement ag = new Agreement();
Console.WriteLine("小美:老母亲,我们去读书了!");
Console.WriteLine("老母亲:乖,好好读呀!");
ag.Reading();
Console.WriteLine();
Console.WriteLine("小美:老母亲,我们去练字了!");
Console.WriteLine("老母亲:好呀好呀!");
ag.Writing();
System.Console.Read();
}
}
}
(2)变压器案例
变压器把一种电压变换成另一种电压。美国的生活用电电压是110V,而中国的电压是220V。如果要在中国使用美国电器,就必须有一个能把220V电压转换成110V电压的变压器。这个变压器就是一个Adapter。
注:(1)必须完成,(2)可以选做
实验四桥接模式的运用
一、 实验目的:
通过本次实验,使学生运用桥接模式的思想与方法,编写程序。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
(1)设计模式之Bridge——游戏篇
今天从电子市场买来两张游戏碟,一张是三国游戏(SanGuoGame),一张是CS游戏(CSGame)。玩过游戏的人可能都知道,游戏对计算机系统(ComputerSystem)是有要求的,可能一个游戏在Windows98系统下能玩,到了Windows2000系统下就不能玩了,因此为了不走冤枉路,先看看游戏要求的计算机系统(ComputerSystem)可是一个好习惯呦!
好了,闲话少叙开始我们的游戏旅程吧:
1、 在这里,先定义计算机系统(ComputerSystem)接口类:
public interface ComputerSystem {
public abstract void playGame(); //玩游戏
}
2、 再定义对计算机系统(ComputerSystem)接口的具体实现类:
A:Windows98系统
public class Windows98 implements ComputerSystem{
public void playGame(){
System.out.println("玩Windows98游戏!");
}
}
B:Windows2000系统
public class Windows2000 implements ComputerSystem{
public void playGame(){
System.out.println("玩Windows2000游戏!");
}
}
3、 定义游戏(Game)类:
public abstract class Game {
public abstract void play(); //玩游戏
protected ComputerSystem getSetupSystem(String type) { //获得要安装的系统
if (type.equals("Windows98")) { //如果游戏要求必须安装在Windows98下
return new Windows98(); //使用Windows98系统
}
else if (type.equals("Windows2000")) { //如果游戏要求必须安装在Windows2000下
return new Windows2000(); //使用Windows2000系统
}else {
return new Windows98(); //默认启动的是Windows98系统
}
}
}
4、 定义游戏(Game)类的子类:
A:三国游戏(SanGuoGame)
public class SanGuoGame extends Game {
private ComputerSystem computerSystem;
public SanGuoGame(String type) {//看游戏要求安装在那个系统上
computerSystem = getSetupSystem(type);//那么使用这个系统
}
public void play() {//玩游戏
computerSystem.playGame();
System.out.println("我正在玩三国,不要烦我!");
}
}
B:CS游戏(CSGame)
public class CSGame extends Game {
private ComputerSystem computerSystem;
public CSGame(String type) { //看游戏要求安装在那个系统上
computerSystem = getSetupSystem(type); //那么使用这个系统
}
public void play() { //玩游戏
computerSystem.playGame();
System.out.println("我正在玩CS,不要烦我!");
}
}
5、编写测试类:
public class Test {
public static void main(String[] args) {
Game sanguo = new SanGuoGame("Windows98"); //游戏要求Windows98
sanguo.play();
sanguo = new SanGuoGame("Windows2000");//游戏要求Windows2000
sanguo.play();
Game cs = new CSGame("Windows98"); //游戏要求Windows98
cs.play();
cs = new CSGame("Windows2000");//游戏要求Windows2000
cs.play();
}
}
6、说明:
A:Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合。
B:从本例中我们可以看到,不同的游戏对系统的要求是不同的,三国和CS可能都需要Windows98系统,也可能需要Windows2000系统,甚至要求不相同的系统,因此处理这类问题,我们就可以用Bridge这种模式了。
C:这里行为是指游戏,抽象是指系统!
(2)咖啡案例
例如,一杯咖啡为例,子类实现类为四个:中杯加奶、大杯加奶、 中杯不加奶、大杯不加奶。
但是,我们注意到:上面四个子类中有概念重叠,可从另外一个角度进行考虑,这四个类实际是两个角色的组合:抽象 和行为,其中抽象为:中杯和大杯;行为为:加奶 不加奶(如加橙汁 加苹果汁). 实现四个子类在抽象和行为之间发生了固定的绑定关系,如果以后动态增加加葡萄汁的行为,就必须再增加两个类:中杯加葡萄汁和大杯加葡萄汁。显然混乱,扩展性极差。那我们从分离抽象和行为的角度,使用Bridge模式来实现。
注:(1)必须完成,(2)可以选做
实验五抽象工厂模式的运用
一、 实验目的:
通过本次实验,使学生运用抽象工厂模式的思想与方法,编写程序。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
抽象工厂模式在小花果园系统中的实现
现在,我们在佛罗里达的渡假小屋的后面要建一座小花园。但要建的小花园一处在北方地区,另一处在亚热带地区。抽象工厂模式正好适用于我们的情况。
两处花园就相当于两个产品族。显然,给北方花园的植物是要种植在一起的,给南方花园的植物是要另种植在一起的。这种分别应当体现在系统的设计上面。这就满足了应当使用抽象工厂模式的第二和第三个条件。
抽象工厂模式应用于小花果园系统中的结构图如下。用三种不同的背景颜色区分工厂类,蔬菜类(第一产品族),和水果类的类图(第二产品族)。
实验六策略模式的运用
一、 实验目的:
通过本次实验,使学生运用策略模式的思想与方法,编写程序。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
设计模式之Strategy——简历篇
1、学生大学毕业找工作要写简历(Resume),最好写两种类型的简历,一种是用中文写的,一种是用英文写的,如果是国企的话,就投中文简历(ChineseResume),如果是外企的话,就投英文简历(EnglishResume), 请编程序实现
2、对数组元素进行排序,可以采用多种算法,每种算法相当于一个策略,试编写程序用策略模式实现。
注:两个选做一个即可
实验七观察者模式的运用
一、 实验目的:
通过本次实验,使学生运用观察者模式的思想与方法,编写程序。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
1、设计模式之Observer——公交篇
说到公交车,大家都不陌生,坐过公交车的朋友可能都知道,一般公交车上都有售票员(BusConductor),当然无人售票车要除外了。售票员(BusConductor)除了收取乘客(Passenger)的车费还起着监控的作用。
试用观察者模式实现本案例。
2、自己在现实生活中找一个符合观察者模式的案例,编程序实现。
注:两个选做一个即可
实验八设计模式的综合运用
一、 实验目的:
通过本次实验,提高学生运用设计模式的思想与方法编写程序的能力。
二、 实验要求:
1、运用C++/JAVA语言工具编写给定案例的程序。
2、提交实验报告,报告内容如下:
实验题目、实验目的、实验内容、算法描述、程序结构、程序清单、调试情况、设计技巧、心得体会。
3、上机时间:2学时。
三、实验内容:
各种汽车的行驶,步骤都一样,即包括起步(StartUp)、加速、行驶(Run)、停车(Stop)等等行为。但各种汽车行驶的动作之间可能存在着差异,例如:手动档和自动档,但是接口是一样的,换句话说,基本都是这几个动作。结合Template Method模式编程实现。