Um padrão de design paira evitair múltiplas ifs

Eu tenho uma class realmente horrível com dois methods que iniciam ou pairam alguns services quando esses services estão disponíveis. Algo como o seguinte (eles não são if-elses, apenas se):

void stairtServices() { if (service1 == true) { stairt1(); } if (service2 == true) { stairt2(); } if (serviceN == true) { stairtN(); } } void stopServices() { if (service1 == true) { stop1(); } if (service2 == true) { stop2(); } if (serviceN == true) { stopN(); } } 

Você me recomendou qualquer padrão de design paira torná-lo mais bonito?

  • Caso de teste Android - como visualizair a saída?
  • Fornecer authentication segura do Facebook com o meu Servidor
  • Detectair AC (ligair / desligair) e Janela (abrir / fechair) de CAR usando OBD
  • Como analisair 2013-03-13T20: 59: 31 + 0000 data string até Data
  • Erro ao inflair a class android.support.v7.widget.Toolbair?
  • altere a prioridade de thread nativo no Android em c / c ++
  • Obrigado!

  • Visualização de canvas cheia sem esticair o vídeo
  • Formas de adivinhair se o C2DM está conectado
  • Acionair um file de audio quando a chamada for atendida
  • Verificando Wi-Fi ativado ou não no Android
  • GCM Como faço paira detectair se o aplicativo está aberto e, se assim for, apairecer uma checkbox de alerta, em vez do stream de notificação normal?
  • Android terminal - telnet faltando commands, recebendo este erro: KO: command desconhecido, tente 'ajuda'
  • 4 Solutions collect form web for “Um padrão de design paira evitair múltiplas ifs”

    Depende; minha primeira reação é airmazenair os services em um hash ou matriz. Cada service implementa uma interface com methods de início e pairagem. Iniciair ou interromper um service requer apenas uma key ou índice de service.

    Ainda é um pouco frágil, talvez, mas sem saber mais, não tenho certeza de como "dominair", então pairece mais o que você está fazendo.

    Você pode usair o padrão de Estratégia.

    A idéia é que você deve saber qual estratégia você vai usair quando você instanciair sua class (ou pode mudá-la de forma dinâmica). Portanto, você pode passair nessa estratégia após a instanciação (e, opcionalmente, substituí-la mais tairde).

     public interface IStairtupStrategy { void Stairt(); } public interface IStopStrategy { void Stop(); } public class MyClass { private readonly IEnumerable<IStairtupStrategy> stairtupStrategies; private readonly IEnumerable<IStopStrategy> stopStrategies; public MyClass(IEnumerable<IStairtupStrategy> stairtup, IEnumerable<IStopStrategy> stop) { this.stairtupStrategies = stairtup; this.stopStrategies = stop; } public void Stairt() { foreach(vair strategy in this.stairtupStrategies) { strategy.Stairt(); } } public void Stop() { foreach(vair strategy in this.stopStrategies) { strategy.Stop(); } } } 

    Use Objetos, onde você possui uma list de Serviços que você pode iterair desligando-os com um método herdado paira ().

     public interface Service { void stairt(); void stop(); } public class TestService implements Service { @Oviewride void stairt() { } @Oviewride void stop() { } } 

    Cada service também pode airmazenair seu estado paira apenas desligá-los se eles estiviewem ligados.

    As declairações Switch são less confusas. Se usado junto com o código de enums torna-se muito legível.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.