设计模式-观察者模式+适配器模式
某公司欲开发一套机房监控系统,如果机房达到某一指定温度,温度传感器(Thermosensor)将自动传递信号给各种响应设备,例如警示灯(caution light)将闪烁(flicker())、报警器(Annunciator)将发出警报(alarm())、安全逃生门(SecurityDoor)将自动开启(open())、隔热门(insulated door)将自动关闭(close())等,每一种响应设备的行为由专门的程序来控制。为了将来能够方便地引入新类型的响应设备,采用观察者模式和适配器模式设计并模拟实现该系统。
类图:

实现代码:
抽象观察目标类Subject : package ObserveAndAdapterPattern;
import java.util.ArrayList;
public abstract class Subject { protected ArrayList<ResponseEquipment> responseEquipments = new ArrayList();
public void add(ResponseEquipment responseEquipment){ responseEquipments.add(responseEquipment); }
public void remove(ResponseEquipment responseEquipment){ responseEquipments.remove(responseEquipment);
} public abstract void trigger(); }
package ObserveAndAdapterPattern;
public class Thermosensor extends Subject { @Override public void trigger() { for (ResponseEquipment responseEquipment: responseEquipments){ responseEquipment.response(); } } }
抽象观察者(目标抽象类)ResponseEquipment : package ObserveAndAdapterPattern;
public interface ResponseEquipment { public void response(); }
具体观察者(适配器)类AnnunciatorObserver : package ObserveAndAdapterPattern;
public class AnnunciatorObserver implements ResponseEquipment{ private Annunciator annunciator = new Annunciator();
@Override public void response() { annunciator.alarm(); } } 具体观察者(适配器)类CautionLightObserver : package ObserveAndAdapterPattern;
public class CautionLightObserver implements ResponseEquipment { private CautionLight cautionLight = new CautionLight(); @Override public void response() { cautionLight.flicker(); } } 具体观察者(适配器)类InsulatedDoorObserver : package ObserveAndAdapterPattern;
public class InsulatedDoorObserver implements ResponseEquipment { private InsulatedDoor insulatedDoor = new InsulatedDoor(); @Override public void response() { insulatedDoor.close(); } }
具体观察者(适配器)类SecurityDoorObserver : package ObserveAndAdapterPattern;
public class SecurityDoorObserver implements ResponseEquipment { private SecurityDoor securityDoor = new SecurityDoor(); @Override public void response() { securityDoor.open(); } }
适配者类Annunciator : package ObserveAndAdapterPattern;
public class Annunciator { public void alarm(){ System.out.println("报警器发出警报"); } } 适配者类CautionLight : package ObserveAndAdapterPattern;
public class CautionLight { public void flicker(){ System.out.println("警示灯闪烁"); } }
适配者类InsulatedDoor : package ObserveAndAdapterPattern;
public class InsulatedDoor { public void close(){ System.out.println("隔热门自动关闭"); } }
适配者类SecurityDoor : package ObserveAndAdapterPattern;
public class SecurityDoor { public void open(){ System.out.println("安全逃生门自动开启"); } }
客户端Client : package ObserveAndAdapterPattern; public class Client { public static void main(String[] args) { ResponseEquipment annunciatorObserver,cautionLightObserver,insulateDoorObserver,securityDoorObserver; annunciatorObserver = new AnnunciatorObserver(); cautionLightObserver = new CautionLightObserver(); insulateDoorObserver = new InsulatedDoorObserver(); securityDoorObserver = new SecurityDoorObserver();
Subject thermosensor = new Thermosensor(); thermosensor.add(annunciatorObserver); thermosensor.add(cautionLightObserver); thermosensor.add(insulateDoorObserver); thermosensor.add(securityDoorObserver); //当温度超过一定温度 thermosensor.trigger(); } } |
更多推荐
所有评论(0)