最近遇到一个需求,开关门的动作,需要接入不同的硬件厂商。也就是一个开门的方法,每个厂商的实现方式都不同。这样就需要定义一个接口,根据不同的厂商调用不同的方法 ,每一种方法就是一种开门的策略,下面看具体实现:
1.首先定义获取门状态的接口。
public interface FuGuiDoorInterface {
/**
* 获取门状态
* @param type 门号
* @return 门状态
*/
String getDoorState(String type);
}
public class FuGuiManager {
/**
* iot门的实例接口
*/
private FuGuiDoorInterface mFuGuiDoorInterface;
/**
* 注册门的实例
*
* @param mFuGuiDoorInterface
*/
public FuGuiManager registerIotDoorInterface(FuGuiDoorInterface mFuGuiDoorInterface)
{
this.mFuGuiDoorInterface = mFuGuiDoorInterface;
return fuGuiManager == null ? newInstance() : fuGuiManager;
}
/**
* 获取iot注册门的实例
*
* @return
*/
public FuGuiDoorInterface getmFuGuiDoorInterface() {
return mFuGuiDoorInterface;
}
String state = getmFuGuiDoorInterface().getDoorState(num);
}
2。根据不同条件实施不同策略。
if(FuGuiInfo.IOT_VERSION.equals(FuGuiInfo.IOT_V51)){
//门注册
FuGuiManager.newInstance().registerIotDoorInterface(new com.fugui.iot.signway.DoorManager());
}else if (FuGuiInfo.IOT_VERSION.equals(FuGuiInfo.IOT_V60)) {
//门注册
FuGuiManager.newInstance().registerIotDoorInterface(new com.fugui.iot.qianhui.DoorManager());
}
3.每种策略的具体实现。
public class DoorManager implements FuGuiDoorInterface {
@Override
public String getDoorState(String type) {
FuGuiInfo.checkLockTime = System.currentTimeMillis();
if(GpioManager.getInstance().getLeftDoorStatus(0) == 0){
Log.v("qhDoorManager", "左门状态:关");
FuGuiInfo.checkLockTime = System.currentTimeMillis();
FuGuiInfo.setLeftDoorStatus(FuGuiInfo.DOOR_CLOSE);
return FuGuiInfo.DOOR_CLOSE;
}else {
Log.v("qhDoorManager", "左门状态:开");
FuGuiInfo.checkLockTime = System.currentTimeMillis();
FuGuiInfo.setLeftDoorStatus(FuGuiInfo.DOOR_OPEN);
return FuGuiInfo.DOOR_OPEN;
}
}