设计模式实验8.docx
- 文档编号:12956778
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:10
- 大小:103.46KB
设计模式实验8.docx
《设计模式实验8.docx》由会员分享,可在线阅读,更多相关《设计模式实验8.docx(10页珍藏版)》请在冰点文库上搜索。
设计模式实验8
软件设计与体系结构
实验报告
课程名称
软件设计与体系结构
课程编号
0920116
实验项目名称
装饰、责任链模式案例
学号
班级
姓名
专业
学生所在学院
软件学院
指导教师
实验室名称地点
计算机软件第二实验室21#427
实验时间
2014年1月3日
哈尔滨工程大学
软件学院
实验名称:
装饰、责任链模式案例
实验目的:
装饰模式:
动态地给一个对象添加一些额外的职责。
就扩展功能来说,装饰模式提供比生成子类灵活的选择。
通过实验掌握装配模式,了解装配模式原理。
责任链模式:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
通过实验掌握责任链模式,了解责任链模式原理。
实验内容
装配模式:
问题描述:
自定义JButton
1UML类图
2程序代码
packagejbutton;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassCustomJButtonextendsJComponent{
//decoratedcomponent
protectedJComponentchild;
publicCustomJButton(JComponentcomponent){
child=component;
this.setLayout(newBorderLayout());
this.add(child);
component.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEventme){
repaint();
}
});
component.addFocusListener(newFocusAdapter(){
publicvoidfocusGained(FocusEventfe){
repaint();
}
publicvoidfocusLost(FocusEventfe){
repaint();
}
});
}
publicvoidpaint(Graphicsg){
super.paint(g);
intheight=this.getHeight();
intwidth=this.getWidth();
g.setColor(Color.red);
g.setFont(newFont("",Font.BOLD,2));
g.drawLine(0,0,width,height);
}
}
packagejbutton;
importjavax.swing.*;
importjava.awt.*;
publicclassCustomJFrameextendsJFrame{
publicCustomJFrame()
{
setSize(400,200);
getContentPane().setLayout(newFlowLayout());
getContentPane().add(newCustomJButton(newJButton("Save")));
show();
}
publicstaticvoidmain(Stringargs[])
{
newCustomJFrame();
}
}
3程序的执行结果
责任链模式:
问题描述:
加薪申请
1UML类图
2程序代码
packageadd_salary;
publicclassCommonManagerextendsManager{
publicCommonManager(Stringname){
super(name);
}
publicvoidRequestApplications(Requestrequest){
//经理所能有的权限就是可准许下属两天内的假期
if(request.getRequestType()=="请假"&&request.getNumber()<=2){
System.out.println(name+":
"+request.getRequestContent()+"数量"
+request.getNumber()+"被批准");
}else{
//其余的申请都需要转到上级
if(superior!
=null)
superior.RequestApplications(request);
}
}
}
packageadd_salary;
publicclassGeneralManagerextendsManager{
publicGeneralManager(Stringname){
super(name);
}
publicvoidRequestApplications(Requestrequest){
if(request.getRequestType()=="请假"){
//总经理可准许下属任意天的假期
System.out.println(name+":
"+request.getRequestContent()+"数量"
+request.getNumber()+"被批准");
}
//加薪在500以内,没有问题
elseif(request.getRequestType()=="加薪"&&request.getNumber()<=500){
System.out.println(name+":
"+request.getRequestContent()+"数量"
+request.getNumber()+"被批准");
}elseif(request.getRequestType()=="加薪"
&&request.getNumber()>500){
System.out.println(name+":
"+request.getRequestContent()+"数量"
+request.getNumber()+"再说吧");
}
}
}
packageadd_salary;
publicclassMajordomoextendsManager{
publicMajordomo(Stringname){
super(name);
}
publicvoidRequestApplications(Requestrequest){
//总监所能有的权限就是可准许下属一周内的假期
if(request.getRequestType()=="请假"&&request.getNumber()<=5){
System.out.println(name+":
"+request.getRequestContent()+"数量"
+request.getNumber()+"被批准");
}else{
if(superior!
=null)
//其余的申请都需转到上级
superior.RequestApplications(request);
}
}
}
packageadd_salary;
publicabstractclassManager{
protectedStringname;
//管理者的上级
protectedManagersuperior;
publicManager(Stringname)
{
this.name=name;
}
//设置管理者的上级
publicvoidSetSuperior(Managersuperior)
{
this.superior=superior;
}
//申请请求
abstractpublicvoidRequestApplications(Requestrequest);
}
packageadd_salary;
publicclassRequest{
privateStringrequestType;
privateStringrequestContent;
privateintnumber;
publicStringgetRequestType(){
returnrequestType;
}
publicvoidsetRequestType(StringrequestType){
this.requestType=requestType;
}
publicStringgetRequestContent(){
returnrequestContent;
}
publicvoidsetRequestContent(StringrequestContent){
this.requestContent=requestContent;
}
publicintgetNumber(){
returnnumber;
}
publicvoidsetNumber(intnumber){
this.number=number;
}
}
packageadd_salary;
publicclassRequest{
privateStringrequestType;
privateStringrequestContent;
privateintnumber;
publicStringgetRequestType(){
returnrequestType;
}
publicvoidsetRequestType(StringrequestType){
this.requestType=requestType;
}
publicStringgetRequestContent(){
returnrequestContent;
}
publicvoidsetRequestContent(StringrequestContent){
this.requestContent=requestContent;
}
publicintgetNumber(){
returnnumber;
}
publicvoidsetNumber(intnumber){
this.number=number;
}
}
3程序的执行结果
对实验认识
通过此次实验,我加深了对装配模式以及责任链模式的理解,清楚了责任链模式与装配模式的原理,以及适用范围。
基本能够运用装配模式以及责任链模式。
这是设计模式最后一次实验,这八次试验内容非常丰富,收获极大,对我以后的学习以及工作将起到极大的作用,很大程度的提高了我的编码能力以及水平,望在以后的学习,工作中能够较好的运用设计模式所学到的知识,做到活学活用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 实验