Если состояние подключения устройства остается неизменным, я хотел бы использовать 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 себя.
с использованием флага достаточно хорошо – DnR
вам необходимо проверить обнаружение соединения? –
Так что, в основном, это простое использование, если другие инструкции для управления потоком ... – sirvon