软件工程专业考试.docx
厦门大学软件体系结构课程试卷软件学院系2010秋季年级软件工程专业主考教师:王备战 试卷类型:(A卷)三、请书写一个类,该类只能产生同一个对象。(10分) Public class Singleton Private static final Singleton singleton=new Singleton(); Private Singleton() Public static Singleton getInstance() Return singleton;四、程序补充题. (2*10分)1. 观察者模式请根据以上类图填充完整下面的程式源码。public interface Subject public void registerObserver (Observer o);public void removeObserver (Observer o);public void notifyObserver ();public interface ObserverPublic void update (float temp, float humidity, float pressure);public interface DisplayElement public void display () ;public class WeatherData implement Subjectprivate ArrayList observers;private float temperature;private float humidity;private float pressure;public WeatherData() observers=new ArrayList();public void registerObserver( Observer o) /有新的观察者加入时 observers.add(o); public void notifyObservers() /状态更新时,通知各observer做状态的改变Iterator itr = observers.iterator(); Observer observer=null; For(;itr.hasNext();) observer =( Observer)itr.next(); observer.update(this. temperature,this. humidity,this. pressure); public void measurementsChanged()/度量值发生变化时通知observer this. notifyObservers();public void setMeasurements(float temperature, float humidity, float pressure)this.temoreature=temperature;this.hunidity=humidity;this.pressure=pressure;measurementsChanged();2. 责任链模式 责任链模式涉及到的角色 责任链模式的实现抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由一个抽象类或接口实现。具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。根据上面类图补充完整下面程序源码。具体处理者处理逻辑如下:若request大于等于 0且小于10,则由ConcreteHandler1处理;若request大于等于10且小于20,则由ConcreteHandler2处理;若request大于等于20且小与30,则由ConcreteHandler3处理;using System;/ "Handler" abstract class Handler / Fields protected Handler successor; / Methods public void SetSuccessor( Handler successor ) this.successor = successor; abstract public void HandleRequest( int request );/ "ConcreteHandler1"class ConcreteHandler1 : Handler / Methods override public void HandleRequest( int request ) if (request >= 0 && request < 10) Console.WriteLine("request 值等于: " + request + " 输出 -> h1"); else this.successor.HandleRequest(request); / "ConcreteHandler2"class ConcreteHandler2 : Handler / Methods override public void HandleRequest( int request ) if (request >= 10 && request < 20) Console.WriteLine("request 值等于: " + request + " 输出 -> h2"); else this.successor.HandleRequest(request);/ "ConcreteHandler3"class ConcreteHandler3 : Handler / Methods override public void HandleRequest( int request ) if (request >= 20 && request < 30) Console.WriteLine("request 值等于: " + request + " 输出 -> h3"); else if (this.successor != null) this.successor.HandleRequest(request); / Client testpublic class Client public static void Main( string args ) / Setup Chain of ResponsibilityHandler h1=new ConcreteHandler1(); Handler h2=new ConcreteHandler2();Handler h3= new ConcreteHandler3();h1. SetSuccessor(h2);h2. SetSuccessor(h3); / Generate and process request int requests = 2, 5, 14, 22, 18, 3, 27, 20 foreach( int request in requests ) h1.HandleRequest( request ); 厦门大学标准试卷说明一、主考教师在出卷时应填写课程名称、学院、系、年级、专业、主考教师,并注明A卷或B卷。全校性选修课试卷只须注明课程名称。二、试卷中文字体一律采用宋体,行距1.5倍。大标题采用四号宋体、小标题号采用小四号宋体。其它外文、特殊专业符号的字体和字号由任课教师自已确定。四、主考教师出卷后交到系里,由系里统一印刷保管,开考前由主考教师向系里领取。五、答题卷和试卷分开。答题卷由各系根据学校标准格式统一印制,开考前由主考教师向系里领取。