栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

软件设计师认证 - 设计模式相关习题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

软件设计师认证 - 设计模式相关习题

现欲构造一文件/目录树,采用组合(Composite)设计模式来设计

 

 

【Java代码】 import Java.util.ArrayList; import java.util.List; (1) class AbstractFile{ protected String name; public void printName( ){System.out.println( name );} public abstract boolean addChild( AbstractFile file ); public abstract boolean removeChild( AbstractF ile file ); public abstract List getChildren( ); } class File extends AbstractFile{ public File( String name ){this.name=name;} public boolean addChild( AbstractFile file ){return false;} public boolean removeChild( AbstractFile file ){return false;} public List getChildren( ){return (2) ;} } class Folder extends AbstractFile{ private List childList; public Folder( String name ){ this.name=name; this.childList=new ArrayList( ); } public boolean addChild( AbstractFile file ) { return childList.add( file );} public boolean removeChild( AbstractFile file ){return childList.remove( file );} public (3) getChildren( ){return (4) ;} } public class Client{ public static void main( String[] args ){ //构造一个树形的文件/目录结构 AbstractFile rootFolder= new Folder( "c:\ " ); AbstractFile compositeFolder=new Folder( "composite" ); AbstractFile windowsFolder=new Folder( "windows" ); AbstractFile file=new File( "TestComposite.java" ); rootFolder.addChild( compositeFolder ) ; rootFolder.addChild( windowsFolder ); compositeFolder.addChild( file ) ; //打印目录文件树 printTree( rootFolder ); } private static void printTree( AbslractFile ifile ){ ifile.printName( ); List children=ifile.getChildreno: if( children = =null ) return; for ( AbstractFile ..file:children ) { (5) ; } } } 该程序运行后输出结果为: c: composite TestComposite.java Windows 参考答案:

 

这道题没有难度,基本上不了解组合模式也能写出。
已知某类库开发商提供了一套类库,类库中定义了Application类和document类,它们之间的 关系如图6-30所示,其中,Application 类表示应用程序自身,而document类则表示应用程序打开 的文档。Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中 读出信息后,它就由一个document对象表示 当开发一个具体的应用程序时,开发者需要分别创建自己的Application和document子类,例如图6-30中的类MyApplication和类Mydocument,并分别实现Application和document类中的某些方法。已知Application类中的opendocument方法采用了模板方法(Template Method)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示: 1.首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回; 2.创建文档对象; 3.通过文档对象打开文档; 4.通过文档对象读取文档信息; 5.将文档对象加入到Application的文档对象集合中。

 

【Java 代码】 abstract class document{ public void save( ){ } public void open(String docName){ } public void close( ){ } public abstract void read(String docName ); }; abstract class Appplication{ private Vector < (1) > docs; public boolean canOpendocument( String docName ){ } public void adddocument( document adocument ){ docs.add( (2) ); } public abstract document doCreatedocument( ); public void opendocument( String docName ){ if ( (3) ){ System.out.println( "文档无法打开!" ); return; } (4) adoc = (5) ; (6) ; (7) ; (8) ; } } 参考答案:

 


已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审 批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括 10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的 采购单就需要开会讨论决定。 采用责任链设计模式(Chain of Responsibility)对上述过程进行设计后得到的类图如图6- 33所示。 【Java代码】 class PurchaseRequest { public double Amount; // 一个采购的金额 public int Number; // 采购单编号 public String Purpose; // 采购目的 }; class Approver { // 审批者类 public Approver( ){ successor = null; } public void ProcessRequest( PurchaseRequest aRequest ){ if( successor != null ){ successor. (1) ; } } public void SetSuccessor( Approver aSuccesssor ){ successor = aSuccesssor; } private (2) successor; }; class Congress extends Approver { public void ProcessRequest( PurchaseRequest aRequest ){ if( aRequest.Amount>= 500000 ){ } else (3) .ProcessRequest( aRequest ); } }; class Director extends Approver { public void ProcessRequest( PurchaseRequest aRequest ){ } }; class President extends Approver { public void ProcessRequest( PurchaseRequest aRequest ){ } }; class VicePresident extends Approver { public void ProcessRequest( PurchaseRequest aRequest ){ } }; public class rs { public static void main( String[] args ) throws IOException { CongressMeeting = new Congress( ); VicePresidentSam = new VicePresident( ); DirectorLarry = new Director( ); PresidentTammy = new President( ); //构造责任链 Meeting.SetSuccessor( null ); Sam.SetSuccessor( (4) ); Tammy.SetSuccessor( (5) ); Larry.SetSuccessor( (6) ); // 构造一采购审批请求 PurchaseRequestaRequest = new PurchaseRequest( ); BufferedReader br = new BufferedReader( newInputStreamReader( System.in ) ); aRequest.Amount = Double.parseDouble( br.readLine( ) ); (7) .ProcessRequest( aRequest ); // 开始审批 return; } } 参考答案

 


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号