搜索
您的当前位置:首页正文

实验4 适配器组合外观模式.方案

来源:榕意旅游网
实 验 报 告

系 别 课程名称 班 级 设计模式 学 号 姓 名 实验名称 实 验 过 程 一.实验目的与要求 熟练使用适配器、组合、外观模式 二.实验设备 微型计算机 三.实验原理和实验内容 1. 实验原理: 2. 实验内容: 1) 某公司欲开发一款儿童玩具汽车,为了更好地吸引小朋友的注意力,该玩具汽车在移动过程中伴随着灯光闪烁和声音提示,在该公司以往的产品中已经实现了控制灯光闪烁和声音提示的程序,为了重用先前的代码并且使得汽车控制软件具有更好的灵活性和扩展性,使用适配器模式设计该系统,所得类图如下图所示。编程模式实现程序。 时间 20160418 地点 适配器、组合、外观 2) 某公司的组织结构采用组合设计模式来设计,得到类图如下。其中Company为抽象类,定义了在组织结 1

构上添加(Add)和删除(Delete)部门的方法接口。类ConcreteCompany表示具体的公司,可以设置不同的部门。类HRDepartment和类FianceDepartment分别表示人力资源部和财务部。编程模拟实现。 3) 某信息系统需要提供一个数据读取和报表显示模块,可以将来自不同类型文件中的数据转换成XML格式,并对数据进行统计和分析,然后以报表方式来显示数据。由于该过程需要涉及多个类,因此使用外观模式进行设计,编程模拟实现程序。FileOperation类用于读取文件,XMLDataConvertor类用于将不同格式文件转换为XML格式,DataAnalysis用于对XML数据进行统计分析,ReportDisplay类用于显示报表。为了让系统具有更好的扩展性,在系统设计中引入了抽象外观类AbstractFacade,它拥有多个不同的子类,如XMLFacade,它用于与读取、分析和显示XML数据的类交互,ExtendedFacade类用于与读取、转换、分析和显示非XML数据的类交互。 3. 实验结果 2

1) 代码: package com.yue.www; abstract class Sound{ } class ConcreteSound extends Sound{ } abstract class Lamp{ } class ConcreteLamp extends Lamp{ } class CarController{ } class CarAdapter extends CarController{ private Sound sound; private Lamp lamp; public CarAdapter(Sound sound ,Lamp lamp){ } public void sound(){ sound.phonate(); }

3

public abstract void phonate(); @Override public void phonate() { } System.out.println(\"sound\"); public abstract void twinkle(); @Override public void twinkle() { } System.out.println(\"twinkle\"); public void move(){ } public void sound(){ } public void light(){ } System.out.println(\"light\"); System.out.println(\"sound\"); System.out.println(\"move\"); } public void move(){ } public void light(){ } sound.phonate(); lamp.twinkle(); public class Client { } public static void main(String args[]){ } Sound sound ; Lamp lamp; CarController car; sound = new ConcreteSound(); lamp = new ConcreteLamp(); car = new CarAdapter(sound, lamp); car.move(); car.sound(); car.light(); 2) 代码: package com.yue.www; import java.util.ArrayList; import java.util.List; abstract class Company { } class ConcreteDepartment extends Company { private List list = new ArrayList(); public ConcreteDepartment(String s) { } super(s); // TODO Auto-generated constructor stub private String s; public Company(String s) { } abstract void Add(Company c); abstract void Delete(Company c); this.s = s; 4

} @Override void Add(Company c) { } @Override void Delete(Company c) { } list.remove(c); list.add(c); class HRDepartment extends Company { } class FinanceDepartment extends Company { } public class Client { public @Override void Add(Company c) { } @Override void Delete(Company c) { } list.remove(c); list.add(c); private List list = new ArrayList(); public FinanceDepartment(String s) { } super(s); // TODO Auto-generated constructor stub public HRDepartment(String s) { } public @Override void Add(Company c) { } @Override void Delete(Company c) { } list.remove(c); list.add(c); super(s); // TODO Auto-generated constructor stub private List list = new ArrayList(); 5

} public static void main(String args[]) { } ConcreteDepartment con = new ConcreteDepartment(\"总\"); con.Add(new HRDepartment(\"分\")); 3) 代码: package com.Factory.www; class FileOperation { } class XMLDataConvertor{ } class Dataanalysis{ } class ReportDisplay{ public void display(String xmlStr){ }

6

public String read(String fileName){ } System.out.println(\"读取文件\"); return fileName; public String convert(String fileStr){ } System.out.println(\"转换\"); return fileStr; public String handle(String xmlStr){ } System.out.println(\"分析\"); return xmlStr; System.out.println(\"显示\"); } abstract class AbstractFacade{ } class XMLFacade extends AbstractFacade { } class ExtendedFacade extends AbstractFacade{ } public void execute(String fileNmae){ String str = fo.read(fileName); public void ExtendeFacade(){ } public void execute(String fileName) { } private FileOperation fo; private Dataanalysis da; private ReportDisplay rd; public XMLFacade(){ } public void execute(String fileName) { } String str = fo.read(fileName); String xmlstr = da.handle(str); rd.display(str); fo = new FileOperation(); da = new Dataanalysis(); rd = new ReportDisplay(); public abstract void execute(String fileName); 7

} String xmlstr = da.handle(str); rd.display(str); public class Test { } 四.实验总结 public static void main(String[] args) { } AbstractFacade facade; facade = new AbstractFacade(); facade.execute(\"file.xml\"); 8

9

因篇幅问题不能全部显示,请点此查看更多更全内容

Top