A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Singleton e Template Method

Apresentações semelhantes


Apresentação em tema: "Singleton e Template Method"— Transcrição da apresentação:

1 Singleton e Template Method

2 Design Patterns O projeto de software, orientados-a-objetos, é uma tarefa complexa Mais complexa ainda é a criação de software reusável Definir granuralidades Definir hierarquias Definir relacionamentos Ainda assim boas soluções são produzidas: Desenvolvedores experientes Quando uma boa solução é produzida, ela é reusada

3 Referências Estilos de Programação
“Advanced C++ Programming Styles and Idioms”, J. Coplien “Design Patterns”, E. Gamma, R. Helm, J. Vlissides, R. Johnson “A System of Patterns”, R. Buchmann “Pattern Hatching”, J. Vlissides (in “C++ Gems”)

4 Singleton Intenção Motivação Use um Singleton quando:
Garantir que uma classe tenha uma única instância e um único ponto de acesso a essa instância Motivação Sistemas podem precisar de classes com uma única instância Ex. uma único valor de precisão, um único sistema de arquivos Use um Singleton quando: É preciso que exista apenas uma instância de uma classe e essa instância deve ser acessada através de um único ponto bem conhecido Quando essa classe possa ser estendida através de derivação e que os seus clientes possam usar a instância estendida sem modificar seu código

5 Singleton Resolver o problema de variáveis globais e únicas
Inicializar a variável apenas quando necessário Evitar alterações desnecessárias

6 Singleton - Estrutura Acesso controlado à instância única
Evita poluição do espaço de nomes com variáveis globais Permite refinamentos na representação e operações por meio de derivações

7 Singleton em C++ // Only one object of this class can be created
class Singleton { private: void otherOperations(); protected: Singleton(); public: static Singleton& instance(); } Singleton& Singleton::instance() static Singleton _instance; // executes only once return &_instance; // Use if ( Singleton::instance()->value == ...)

8 Singleton em C++ // Only one object of this class can be created
class Singleton { private: static Singleton* _instance; void otherOperations(); protected: Singleton(); public: static Singleton* instance(); static void destroy(); } Singleton* Singleton::_instance = 0; Singleton* Singleton::instance() if (_instance == 0 ) _instance = new Singleton; return _instance; // Use if ( Singleton::instance()->value == ...)

9 Uso do padrão singleton
Definir classes que tem a mesma “assinatura” do singleton class PlacaGrafica { private: PlacaGrafica(); public: static PlacaGrafica& instance(); int nbits(); }; PlacaGrafica& PlacaGrafica::instance() { static PlacaGrafica _instance; return &_instance; } PlacaGrafica::PlacaGrafica() { ...implementar o construtor...}

10 Uso do padrão Singleton
Como evitar a necessidade de copiar a interface do padrão Singleton para todas as classes deste tipo no seu código? Ajustes no padrão são propagados para todos os seus usos? Alternativa: construir um “template”

11 Template para Singleton
template <class T> class TeSingleton { public: static T& instance () static T instance_; return instance_; } virtual ~TeSingleton() {} protected: TeSingleton() {} private: // No copy allowed TeSingleton(const TeSingleton&); TeSingleton& operator=(const TeSingleton&){return *this;} };

12 Uso do Template Singleton
class PlacaGrafica: public TeSingleton<PlacaGrafica> { protected: PlacaGrafica(); public: int nbits(); }; // Using ... if (PlacaGrafica::instance().nbits() == 8 ) } else


Carregar ppt "Singleton e Template Method"

Apresentações semelhantes


Anúncios Google