从另一个类更新类,封装问题
本文关键字:封装 问题 更新 另一个 | 更新日期: 2023-09-27 18:09:58
如何更新一个只能从另一个特定类更新的类?
在下面的示例中,封装被打破了,因为Sensor
可以从任何其他类更新,而不仅仅是从Device
更新。我说的对吗?
class Device
{
public IEnumerable<Sensor> Sensors { get; private set; }
void SomeInternalCall(int sensorId, int signal)
{
Sensors.First(s => s.Id == sensorId).Update(signal);
}
}
class Sensor
{
public int Id { get; private set; }
public event Action<int> OnSignal;
public void Update(int signal)
{
if (OnSignal != null) OnSignal(signal);
}
}
class SensorUser
{
public SensorUser(Sensor s)
{
s.OnSignal += SignalHandler;
}
void SignalHandler(int signal)
{
// ...
}
}
您可以创建一个提供只读访问的接口并将其赋予SensorUser
,而在Device
中拥有Sensor
实例的集合。
interface ISensor
{
int Id { get; }
event Action<int> OnSignal;
}
class Sensor : ISensor
{
public int Id { get; private set; }
public event Action<int> OnSignal;
public void Update(int signal)
{
if (OnSignal != null) OnSignal(signal);
}
}
class SensorUser
{
public SensorUser(ISensor s)
{
s.OnSignal += SignalHandler;
}
}