1. 观察者模式
请根据以上类图填充完整下面的程式源码。
public interface Subject {
public void registerObserver (Observer o);
public void removeObserver (Observer o);
public void notifyObserver ();
}
public interface Observer{
Public void update (float temp, float humidity, float pressure);
}
public interface DisplayElement {
public void display () ;
}
public class WeatherData implement Subject{
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData() {
Observers=new ArrayList();
}
public void registerObserver( Observer o) {
//有新的观察者加入时
……
}
public void notifyObservers() {
//状态更新时,通知各observer做状态的改变
……
}
public void measurementsChanged(){
//度量值发生变化时通知observer
……
}
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
……
}
// "ConcreteHandler2"
class ConcreteHandler2 : Handler
{
// Methods
……
}
// "ConcreteHandler3"
class ConcreteHandler3 : Handler
{
// Methods
……
override public void HandleRequest( int request )
{
……
}
}
/// Client test
public class Client
{
public static void Main( string[] args )
{
// Setup Chain of Responsibility
……
……
// Generate and process request
int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 };
foreach( int request in requests )
h1.HandleRequest( request );
}
}