微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

观察者模式在哪里以及如何正确使用?

如何解决观察者模式在哪里以及如何正确使用?

我正在使用spring-boot编写用于Web应用程序的rest-API BE。我将使用opc-ua milo库来订阅OPC UA服务器。

这是我的第一个应用程序,我想做对。假设我有两个实体的简单应用程序。 WeatherStation它可以具有多个传感器。像这样:

//entity
public class WeatherStation{
    private String name;
    private String ipAddress;
    private String serialNumber;
    private List<Sensor> sensors;
}

//entity
public class Sensor{
    private Integer sensorNumber;
    ...
}

public class WeatherStationService{
    ...
}

public interface WeatherStationRepository{
    ...
}

我希望能够在我的应用程序中连接多个WeatherStation,所以我想到了这样的话:

public class Connector{
    private HashMap<String,Client> clients;
    
    public void connect(WeatherStation weatherStation){
        Client client = new Client();
        client.connect();
        clients.put(weatherStation.getIpAddress(),client);
    }
    
    public void disconnect(){
        ...
    }
}

public class Client{
    OpcuaClient opcuaClient;
    ...
}

好的,这些方法不能正常工作,这只是为了让您了解我的问题。

观察者模式问题 当opcuaClient收到一些值时,我需要通知WeatherStationService。问题在于opc-ua的工作方式是我需要指定NodeId(类似于address),并且我还需要知道我正在读取的数据类型才能进行转换。我可以把它写成固定的,但是我不确定这样做是否是个好办法:

public class Client{
    OpcuaClient opcuaClient;
    
    Client(){
        opcuaClient.subscribe("some NodeId",() -> WeatherStationService.updateTemerature("some value"));
    }
}

或者我应该在这里使用观察者模式,并使客户端 Subject 和WeatherStationService Observer 。我面临的问题是,我可以在其他服务中使用有关温度的信息,因此能够“观察”该信息非常好。但是另一方面,客户端应该通过OPC UA读取多个值,我应该应该能够独立订阅它们,并被告知每个值都已更改。希望我能清楚地描述我的问题,如果您有任何疑问,我会尽力澄清。

所以我的问题是:如果要这样做,我应该在这里使用观察者模式吗?是/否?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。