教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 资格考试 >

第4章 结构型模式实训(4)

来源:网络收集 时间:2026-08-27
导读: } //Getter方法和Setter方法省略 } //多媒体文件类:抽象享元类 (1) MultimediaFile { protected Size size; protected Location location; public abstract void display(); public void setSize(Size size) { thi

} //Getter方法和Setter方法省略 } //多媒体文件类:抽象享元类 (1) MultimediaFile { protected Size size; protected Location location; public abstract void display(); public void setSize(Size size) { this.size = size; } public void setLocation(Location location) { this.location = location; } } //图片文件类:具体享元类 class Image extends MultimediaFile { private String fileName; public Image(String fileName) { this.fileName = fileName; } public void display() { //导入和显示图片文件代码省略,在显示图片时将使用size和location对象 } } //动画文件类:具体享元类 class Animation extends MultimediaFile { //动画文件类代码省略 } //视频文件类:具体享元类 class Video extends MultimediaFile { //视频文件类代码省略 } //多媒体文件工厂类:享元工厂类 class MultimediaFileFactory { private Hashtable ht; //享元池 private int fileNum = 0; //享元对象计数器 public MultimediaFileFactory() { ht = (2) ; } //从享元池中获取对象 public (3) getMultimediaFile(String fileName) { //根据文件后缀名判断文件类型 String[] strArray = fileName.split(\ int ubound = strArray.length; String extendName = strArray[ubound-1]; if(ht.containsKey(fileName)) { return (MultimediaFile) (4) ; } else { if(extendName.equalsIgnoreCase(\ { MultimediaFile file = new Image(fileName); ht.put(fileName,file); fileNum++; } else if(extendName.equalsIgnoreCase(\ { MultimediaFile file = new Animation(fileName); ht.put(fileName,file); (5) ; } //其他代码省略 } } //返回享元对象数量 public int getFileNum() { return fileNum; } } class Test { public static void main(String args[]) { MultimediaFile file1,file2,file3,file4; MultimediaFileFactory factory; factory = new MultimediaFileFactory(); file1 = factory.getMultimediaFile(\ file1.setSize(new Size(300,400)); } } file1.setLocation(new Location(3,5)); file2 = factory.getMultimediaFile(\file2.setSize(new Size(300,400)); file2.setLocation(new Location(6,5)); file3 = factory.getMultimediaFile(\file3.setSize(new Size(200,200)); file3.setLocation(new Location(10,1)); file4 = factory.getMultimediaFile(\file4.setSize(new Size(400,400)); file4.setLocation(new Location(15,2)); System.out.println(file1==file2); //输出语句1 System.out.println(factory.getFileNum()); //输出语句2 在Test类中,“输出语句1”输出结果为 (6) ,“输出语句2”输出结果为 (7) 。

7. 某信息咨询公司推出收费的在线商业信息查询模块,需要对查询用户进行身份验证并记录查询日志,以便根据查询次数收取查询费用,现使用代理模式设计该系统,所得类图如图1所示:

Searcher+doSearch (): String...ProxySearcher-searcher: RealSearcher-validator: AccessValidator-logger: Logger+doSearch (): String+validate (): boolean+log (): void...AccessValidator+validate (): boolean...Logger+log (): void...图1 类图

RealSearcher+doSearch (): String... 在图1中,AccessValidator类用于验证用户身份,它提供方法validate()来实现身份验证;Logger类用于记录用户查询日志,它提供方法log()来保存日志;RealSearcher类实现查询功能,它提供方法doSearch()来查询信息。ProxySearcher作为查询代理,维持对RealSearcher对象、AccessValidator对象和Logger对象的引用。 【Java代码】 class AccessValidator { public boolean validate(String userId) { //身份验证实现代码省略 } } class Logger { public void log(String userId) { //日志记录实现代码省略 } } interface Searcher { public String doSearch(String userId,String keyword); } class RealSearcher implements Searcher { public String doSearch(String userId,String keyword) { //信息查询实现代码省略 } } class ProxySearcher (1) { private RealSearcher searcher = new RealSearcher(); private AccessValidator validator; private Logger logger; public String doSearch(String userId,String keyword) { //如果身份验证成功,则执行查询 if( (2) ) { String result = searcher.doSearch(userId,keyword); (3) ; //记录查询日志 (4) ; //返回查询结果 } else { return null; } } public boolean validate(String userId) { validator = new AccessValidator(); (5) ; } public void log(String userId) { logger = new Logger(); (6) ; } } class Test { public static void main(String args[]) { (7) ; //针对抽象编程,客户端无须分辨真实主题类和代理类 searcher = new ProxySearcher(); String result = searcher.doSearch(\ //此处省略后续处理代码 } } 4.3.3 综合题

1. 实现一个双向适配器实例,使得猫(Cat)可以学狗(Dog)叫,狗可以学猫抓老鼠。绘制相应类图并使用代码编程模拟。

2. 海尔(Haier)、TCL、海信(Hisense)都是家电制造商,它们都生产电视机(Television)、空调(Air Conditioner)、冰箱(Refrigeratory)。现需要设计一个系统,描述这些家电制造商以及它们所制造的电器,要求绘制类图并用代码模拟实现。

3. 某教育机构组织结构如下图所示:

北京总部教务办公室湖南分校行政办公室教务办公室长沙教学点湘潭教学点行政办公室教务办公室行政办公室教务办公室行政办公室

在该教育机构的OA系统中可以给各级办公室下发公文,现采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。

4. 某系统中的文本显示组件类(TextView)和图片显示组件类(PictureView)都继承了组件类(Component),分别用于显示文本内容和图片内容,现需要构造带有滚动条、或者带有黑色边框、或者既有滚动条又有黑色边框的文本显示组件和图片显示组件,为了减少类的个数可使用装饰模式进行设计,绘制类图并编程模拟实现。

5. 在电脑主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check()),CPU的运行(run()),硬盘(HardDisk)的读取(read()),操作系统(OS)的载入(load())等,如果某一过程发生错误则电脑启动失败。使用外观模式模拟该过程,绘制类图并编程模拟实现。

6. 在屏幕中显示一个文本文档,其中相同的字符串“Java”共享同一个对象,而这些字符串的颜色和大小可以不同。现使用享元模式设计一个方案实现字符串对象的共享 …… 此处隐藏:2810字,全部文档内容请下载后查看。喜欢就下载吧 ……

第4章 结构型模式实训(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/413760.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)