每次访问单例实例时都调用一个方法

时间:2014-03-06 00:43:57

标签: c# .net design-patterns singleton

我在我的代码中使用单例类,主要负责与设备通信。

该类中的一个主要功能是ConnectToDevice(),库中还有另一个名为IsPhoneConnected()的方法。

所以基本上在调用任何其他方法之前,简单检查将是连接设备,如果它尚未连接。因此,无论是每个方法还是每次客户端应用程序调用我的库时,都有人负责编写以下代码

(!IsPhoneConnected())
{
   ConnectToDevice() 
    return IsPhoneConnected() // If phone is not connected, try to connect, if still not connected then return false.
}

我不想一次又一次地写这个逻辑。我希望班级能够处理这个问题,而不必一遍又一遍地调用这段代码。

任何想法?

2 个答案:

答案 0 :(得分:2)

如果任何给定的功能需要要连接的手机,它必须已经以某种方式与单身连接类进行交互

在这种情况下,无论代码与单例中的电话进行交互,都可以调用ConnectToDevice()(如果它尚未连接)。

但是,如果你真的想每次执行一个方法,而不必每次都显式调用一组函数,那么你所说的是面向方面的编程< / strong>即可。

此范例不是C#的原生范例,但可以使用PostSharp等工具进行模拟。

有关如何使用PostSharp为代码添加方面的好教程,请查看this CodeProject文章。

你最终会得到类似的东西:

[PhoneConnectedAspect]
private void DoStuffWithPhone
{
     // your code here
}

例如,使用该属性标记的任何方法都可以自动调用ConnectToDevice()方法。

答案 1 :(得分:1)

像Baldrick所说:这听起来有点像面向方面的编程。

然而,如果调用库中的任何方法都需要连接手机,我会将ConnectToDevice嵌入库本身。例如。只需将它嵌入到您的图书馆的每个需要手机连接的方法中。

AOP会更好,但这可以模仿它。