2014-11-27 4 views
0

Таким образом, в основном, если устройство имеет Интернет, допускаются определенные действия , и если нет Интернета, то определенные действия не позволяют запускать.Методологии или шаблоны для отключения/включения операторов на основе условий?

в режиме онлайн & автономный режим.

Каковы некоторые способы построения такого типа ситуации, какие шаблоны использовать?

Очевидным, что приходит в голову, является флаг как условие и оператор if else для обработки выбора кода.

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

Что делать, если уже существует существующая база кода, которая нуждается в этой логике, которая является оптимальным средством для этой ситуации?

+0

с использованием флага достаточно хорошо – DnR

+0

вам необходимо проверить обнаружение соединения? –

+0

Так что, в основном, это простое использование, если другие инструкции для управления потоком ... – sirvon

ответ

0

Может быть, этот код поможет:

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

Я действительно больше ищут способы управления потоком кода на основе определенных условий. Ty tho. – sirvon

+0

@sirvon no problem dude :) –

1

Если состояние подключения устройства остается неизменным, я хотел бы использовать strategy шаблон.

У вас может быть интерфейс (стратегия) «Возможности», с реализацией «OnlineFeatures» и имплантированием «OfflineFeatures», или вы можете иметь каждую отдельную функцию как стратегию с включенной реализацией и отключенной реализацией. Я бы выбрал второй вариант для большей гибкости, но в зависимости от дизайна приложения он может быть переполнен.

Если статус подключения должен динамически меняться, вы все равно можете использовать шаблон стратегии, но это будет зависеть от информации о состоянии, необходимой вам для поддержания между изменениями состояния соединения.

В качестве примера (на C++, но я надеюсь, что идея достаточно ясная): Скажите, что мне нужен калькулятор с двумя возможными функциями, возможностью добавления и возможности размножения. Я хочу иметь пробную версию, которая только добавляет, и версию с разблокированными обеими функциями.

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 для моих инвалидов версии, но вы могли бы реализовать свои классы, чтобы обеспечить достаточную информацию, чтобы обеспечить более usefulfeedback, или реализация сделать соответствующие сигналы обратной связи Ui себя.

+0

Спасибо за описание шаблона. вы могли бы предложить небольшой пример кода? – sirvon

+0

Надеюсь, что помогает @sirvon. – Kindread

+0

Спасибо за это, я собираюсь работать с этим бывшим. И выяснить, как имплантировать. в java. Кажется, все это связано с разделением функций кода и внедрением их стиля модуля. Это то, что мне нужно. – sirvon

Смежные вопросы