1、组合外观迭代器模式案例实验报告 软件设计与体系结构实 验 报 告课程名称软件设计与体系结构课程编号0920116实验项目名称 组合,外观,迭代器模式案例学号班级姓名专业学生所在学院指导教师实验室名称地点实验时间 实验名称: 迭代器,外观,组合模式案例 实验目的:迭代器,外观,组合模式(Observer Pattern)是设计模式中行为模式的一种,它解决了上述具有一对多依赖关系的对象的重用问题。此模式的参与者分为两大类,一类是被观察的目标,另一类是观察该目标的观察者们。正因为该模式是基于“一对多”的关系,所以该模式一般是应用于由一个目标对象和N个观察者对象组成(当然也可以扩展为有多个目标对象,但
2、我们现在只讨论前者)的场合。当目标对象的状态发生改变或做出某种行为时,正在观察该目标对象的观察者们将自动地、连锁地作出相应的响应行为。 通过本次实验了解观察者模式的原理。并能够运用观察者模式来进行编程。实验内容1 UML类图迭代器模式:组合模式:外观模式冲茶2 程序的源代码 迭代器: package Iterator;import java.util.Enumeration;public class MyEnumeration private Enumeration me; private int step; public Enumeration getMe() return me; publ
3、ic void setMe(Enumeration me) this.me = me; public int getStep() return step; public void setStep(int step) this.step = step; public MyEnumeration(Enumeration e) me = e; public void traverse() while (me.hasMoreElements() System.out.println(me.nextElement(); public void jumptraverse() while (me.hasMo
4、reElements() System.out.println(me.nextElement(); for (int i = 1; i step; i+) if (me.hasMoreElements() me.nextElement(); package Iterator;import java.util.Enumeration;import java.util.Vector;public class Test public static void main(String args) / TODO Auto-generated method stub Vector v =new Vector
5、(); v.add(3); v.add(6); v.add(9); v.add(12); v.add(15); v.add(18); v.add(21); v.add(24); v.add(27); Enumeration e=v.elements(); MyEnumeration m=new MyEnumeration(e); System.out.println(normal traverse:); /m.traverse(); m.setStep(3); System.out.println(jump traverse:); m.jumptraverse(); 组合模式:package
6、Combination;public abstract class Company protected String name; public Company(String s) name=s; public abstract void add(Company c); public abstract void remove(Company c); public abstract void display(int depth); public abstract void lineOfDuty();package Combination;public class FinanceDepartment
7、 extends Company public FinanceDepartment(String s) super(s); / TODO Auto-generated constructor stub Override public void add(Company c) / TODO Auto-generated method stub Override public void remove(Company c) / TODO Auto-generated method stub Override public void display(int depth) / TODO Auto-gene
8、rated method stub String s=; for(int i=0;idepth;i+) s=s+-; System.out.println(s+name); Override public void lineOfDuty() / TODO Auto-generated method stub System.out.println(name+ 负责管理公司财务收支); package Combination;import java.io.Serializable;import java.util.ArrayList;import java.util.Collection;impo
9、rt java.util.Iterator;import java.util.List;import java.util.ListIterator;public class ConcreteCompany extends Company implements Serializable private List children; public ConcreteCompany(String s) super(s); children=new ArrayList(); public void add(Company c) / TOO Auto-generated method stub try c
10、hildren.add(c); catch(Exception e) if(children=null) System.out.println(cccc=null); public void remove(Company c) / TODO Auto-generated method stub children.remove(c); public void display(int depth) / TODO Auto-generated method stub String s=; for(int i=0;idepth;i+) s=s+-; System.out.println(s+name)
11、; ListIterator i = children.listIterator(); while(i.hasNext() i.next().display(depth+2); public void lineOfDuty() / TODO Auto-generated method stub Iterator i=children.iterator(); while(i.hasNext() i.next().lineOfDuty(); package Combination;public class HRdepartment extends Company public HRdepartme
12、nt(String s) super(s); / TODO Auto-generated constructor stub Override public void add(Company c) / TODO Auto-generated method stub Override public void remove(Company c) / TODO Auto-generated method stub Override public void display(int depth) / TODO Auto-generated method stub String s=; for(int i=
13、0;idepth;i+) s=s+-; System.out.println(s+name); Override public void lineOfDuty() / TODO Auto-generated method stub System.out.println(name+ 负责员工招聘培训管理); package Combination;public class Test public static void main(String args) ConcreteCompany root=new ConcreteCompany(北京总公司); root.add(new HRdepartm
14、ent(总公司人力资源部); root.add(new FinanceDepartment(总公司财务部); ConcreteCompany comp=new ConcreteCompany(上海华东分公司); comp.add(new HRdepartment(华东分公司人力资源部); comp.add(new FinanceDepartment(华东分公司财务部); root.add(comp); ConcreteCompany comp1=new ConcreteCompany(南京办事处); comp1.add(new HRdepartment(南京办事处人力资源部); comp1.a
15、dd(new FinanceDepartment(南京办事处财务部); comp.add(comp1); ConcreteCompany comp2=new ConcreteCompany(杭州办事处); comp2.add(new HRdepartment(杭州办事处人力资源部); comp2.add(new FinanceDepartment(杭州办事处财务部); comp.add(comp2); System.out.println(公司结构图); root.display(1); System.out.println(各部门职责); root.lineOfDuty(); 外观模式冲茶:
16、public class TeaBag public TeaBag() System.out.println(清香的茶包准备好了); public class Water boolean waterIsBoiling; public Water () setWaterIsBoiling (false); System.out.println (纯净的水准备好了); public void boilFacadeWater () setWaterIsBoiling (true); System.out.println (水在沸腾); public void setWaterIsBoiling (b
17、oolean isWaterBoiling) waterIsBoiling = isWaterBoiling; public boolean getWaterIsBoiling () return waterIsBoiling; public class TeaCup boolean teaBagIsSteeped; Water facadeWater; TeaBag facadeTeaBag; public TeaCup () setTeaBagIsSteeped (false); System.out.println (茶杯准备好了); public void setTeaBagIsSte
18、eped (boolean isTeaBagSteeped) teaBagIsSteeped = isTeaBagSteeped; public boolean getTeaBagIsSteeped () return teaBagIsSteeped; public void addFacadeTeaBag (TeaBag facadeTeaBagIn) facadeTeaBag = facadeTeaBagIn; System.out.println (茶包放在苶杯了); public void addFacadeWater (Water facadeWaterIn) facadeWater
19、 = facadeWaterIn; System.out.println (水倒入杯子了); public void steepTeaBag () if ( (facadeTeaBag != null) & ( (facadeWater != null) & (facadeWater.getWaterIsBoiling () System.out.println (茶渗透到杯子中); setTeaBagIsSteeped (true); else System.out.println (茶没有渗透到杯子中); setTeaBagIsSteeped (false); public String
20、toString() if (this.getTeaBagIsSteeped() return (一杯又香又浓的茶冲好了!); else String tempString = new String (一个杯子); if (facadeWater != null) if (facadeWater.getWaterIsBoiling () tempString = (tempString + 放有沸腾的水 ); else tempString = (tempString + 放有冻水 ); else tempString = (tempString + 没有放水 ); if (facadeTea
21、Bag != null) tempString = (tempString + 有一个茶包); else tempString = (tempString + 没有茶包); return tempString; public class FacadeCuppaMaker boolean teaBagIsSteeped; public FacadeCuppaMaker() System.out.println(FacadeCuppaMaker 准备可以为你冲茶了!); public TeaCup makeACuppa() TeaCup cup = new TeaCup(); TeaBag tea
22、Bag = new TeaBag(); Water water = new Water(); cup.addFacadeTeaBag(teaBag); water.boilFacadeWater(); cup.addFacadeWater(water); cup.steepTeaBag(); return cup; public class Client public static void main (String args) FacadeCuppaMaker cuppaMaker = new FacadeCuppaMaker (); TeaCup teaCup = cuppaMaker.m
23、akeACuppa (); System.out.println (teaCup); 3实验截图迭代器:组合模式:外观模式冲茶:对该模式的认识 经过本次的实验,通过自己动手编代码,是自己理解了模式机制,并且知道迭代器模式有适用性迭代器模式可用来:支持无需暴露聚合对象内部表示的聚合对象遍历支持聚合对象的多个遍历同时进行为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。优点简化聚合的接口,使其不被遍历方法污染支持多个遍历同时进行,支持不同的遍历技术。缺点无。组合模式适用性你想表示对象的部分-整体层次结构;你想要用户能够忽略对象组合与单个对象的差异,用户将一致地处理组合结构中的所有对象。
24、优点使得更容易增加新类型的组件,使得客户代码更简单,因为客户不必知道他们正在 处理的是叶组件还是组合组件。缺点:使得更难以限制组合中的组件类型。外观模式:适用性以下情况使用外观模式:为一个复杂子系统提供一个简单接口时。该接口对大多数客户而言都足够好;更高级的客户能够穿越外观对象。将子系统的类与客户和其他子系统分离,从而提高子系统的独立性和可移植性,收益它对客户隐藏子系统的实现,从而使子系统更易于使用它有利于子系统与客户之间的弱耦合。这就允许改变所包含的子系统但不影响客户。在大型软件系统中降低编译依赖性简化将系统移植到其他平台的过程,因为编译一个子系统一般不需要编译所有其他的子系统。不阻止高级客户访问低层类注意:外观不增加任何功能,它只是简化接口,缺陷不阻止高级客户访问低层类!经过本次实验课的练习,我明白了编代码也是一种技巧,而设计模式便是大家提炼出来的有技巧编代码。使我对软件设计与体系结构这门课有了浓厚的兴趣,相信在学习这门课的知识,会让我获益良多。扣分原因(有扣分时填写)扣分
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1