基于条件禁用/启用语句的方法或模式



所以基本上如果设备有互联网,则允许发生某些操作如果没有互联网,则不允许运行某些操作。

在线模式和离线模式。

有哪些

方法可以构建这种类型的情况,可以使用哪些模式?

想到的明显是一个标志作为条件和一个 if else 语句来处理代码选择。

online = true
getconnection()
if {!getconnection){
    online = false
}
if (online) {
    do everything online
}else {
    do only offline stuff
}

如果已经有一个现有的代码库需要考虑此逻辑,那么针对这种情况的最佳补救措施是什么?

如果设备的连接状态保持静态,我将使用策略模式。

您可以有一个界面(策略)"功能",其中包含"在线功能"实现和"离线功能"嵌入,或者您可以将每个单独的功能作为具有启用实现和禁用实现的策略。我通常会选择第二个以获得更大的灵活性,但根据应用程序设计,这可能会矫枉过正。

如果连接状态

需要动态更改,您仍然可以使用策略模式,但这取决于您需要在连接状态更改之间维护哪些状态信息。

举个例子(C++,但我希望这个想法足够清楚):假设我想要一个具有 2 种可能功能的计算器,能够加法和能够乘法。我想要一个只做加法的试用版,以及一个同时解锁了这两个功能的版本。

class IAddStrategy
{
  virtual int Add( int first, int second ) = 0;
}
class CAdd: public IAddStrategy
{
  virtual int Add( int first, int second ) override { return first + second; }
}
// if I wanted to disable add I could create a CDisabledAdd class
class IMultiplyStrategy
{
  virtual int Multiply( int first, int second ) = 0;
}
class CMultiply : public IMultiplyStrategy
{
  virtual int Multiply( int first, int second ) override { return first * second };
}
class CDisabledMultiply : public IMultiplyStrategy
{
  virtual int Multiply( int first, int second ) override { return 0; }
}
class CCalculator
{
  CCalculator( IAddStrategy &add, IMultiplyStrategy &multiply ) : _add(add), _multiply(multiply)
  int Add( int first, int second ) { return _add.add(first, second); }
  int Multiply( int first, int second ) { return _multiply.multiply(first, second); }
private:
  IAddStrategy &_add;
  IMultiplyStrategy &_multiply;
}
// You don't necessarily need a factory. If features enabled/disabled status needed to change dynamically, I would need set methods for the strategies on calculator as well.
class CCalculatorFactory
{
  CCalculator *CreateTrialCalculator() { return new CCalculator( new CAdd(), new CDisabledMultiply() ); }
  CCalculator *CreateCalculator() { return new CCalculator( new CAdd(), new CMultiply() ); }
}

我只是为我的禁用版本返回 0,但您可以实现您的类以提供足够的信息以提供更有用的反馈,或者让实现自己绘制适当的 UI 反馈。

也许这段代码会有所帮助:

if (CheckNetworkStatus.getInstance(context).isOnline()) {
    //do online stuff
} else {
    //do offline stuff
}

相关内容

  • 没有找到相关文章

最新更新