05 - Singleton

4
08/04/2015 1 Design Patterns Singleton M. Sc. Rodrigo Cezario da Silva [email protected] Singleton Objetivo: Garantir que uma classe tenha somente uma instância e fornecer um ponto global de acesso para a mesma (Gamma et al, 2000).. Singleton- Motivação Algumas classes devem ser instanciadas uma única vez: Um spooler de impressão Um sistema de arquivos Um Window manager Um objeto que contém a configuração de um programa Como assegurar que uma classe possua apenas uma instância e que esta instância seja facilmente acessível? Uma variável global deixa a instância acessível mas não inibe a instanciação múltipla Uma melhor solução: faça com que a classe em si seja responsável pela manutenção da instância única Este é o padrão Singleton ("que-possui-apenas-um") Singleton- Aplicabilidade Use o padrão Singleton quando: Deve haver uma única instância de uma classe e esta instância deve ser acessada a partir de um ponto de acesso bem-conhecido Quando a instância única deve ser extensível através de subclasses e clientes podem usar instâncias diferentes polimorficamente, sem modificação de código

description

slides de aula sobre o padrão singleton

Transcript of 05 - Singleton

Page 1: 05 - Singleton

08/04/2015

1

Design PatternsSingleton

M. Sc. Rodrigo Cezario da Silva

[email protected]

Singleton

• Objetivo:

• Garantir que uma classe tenha somente uma instância e fornecer um

ponto global de acesso para a mesma (Gamma et al, 2000)..

Singleton- Motivação

• Algumas classes devem ser instanciadas uma única vez:

• Um spooler de impressão

• Um sistema de arquivos

• Um Window manager

• Um objeto que contém a configuração de um programa

• Como assegurar que uma classe possua apenas uma instância e que esta

instância seja facilmente acessível?

• Uma variável global deixa a instância acessível mas não inibe a instanciação

múltipla

• Uma melhor solução: faça com que a classe em si seja responsável pela

manutenção da instância única

• Este é o padrão Singleton ("que-possui-apenas-um")

Singleton- Aplicabilidade

• Use o padrão Singleton quando:

• Deve haver uma única instância de uma classe e esta instância deve ser

acessada a partir de um ponto de acesso bem-conhecido

• Quando a instância única deve ser extensível através de subclasses e

clientes podem usar instâncias diferentes polimorficamente, sem

modificação de código

Page 2: 05 - Singleton

08/04/2015

2

Singleton - Estrutura Singleton - Participantes

• Singleton

• Define uma operação getInstance() que permite que clientes acessem

sua instância única

• É um método estático (class method)

• Pode ser responsável pela criação de sua instância única

Singleton - Colaborações

• Clientes acessam a instância apenas através da operação getInstance() do

Singleton

Singleton - Consequências

• Vários benefícios existem:

• Acesso controlado à instância única

• O Singleton tem controle sobre como e quando clientes acessam a

instância

• Espaço de nomes reduzido

• O Singleton é melhor que variáveis globais, já que as "globais" podem ser

encapsuladas na instância única, deixando um único nome externo visível

• Permite refinamento de operações e de representação

• Várias classes Singleton (relacionadas ou não via herança) podem

obedecer a mesma interface, permitindo que um singleton particular seja

escolhido para trabalhar com uma determinada aplicação em tempo de

execução

Page 3: 05 - Singleton

08/04/2015

3

Singleton - Consequências

• Vários benefícios existem:

• Permite a existência de um número variável de instâncias

• É fácil fazer com que o Singleton crie um número fixo, ou um número

máximo de instâncias em vez de apenas uma única instância

• Apenas a implementação interna do Singleton precisa mudar

• Mais flexível que métodos estáticos

• Embora possa parecer que podemos fazer o equivalente a um Singleton

com métodos estáticos, lembre que isso não permitiria o polimorfismo:

NomeDeClasse.xpto(); // chamada não é polimórfica// ... versus ...Config conf = Config.getInstance();conf.xpto(); // essa chamada é polimórfica

Exemplo código com Singleton

private static $_instance;

// Evita que a classe seja instanciada publicamenteprivate function __construct() {}

// Evita que a classe seja clonadaprivate function __clone() {}

public static function getInstance() {if (!isset( self::$_instance )) {

self::$_instance = new self ();}return self::$_instance;

}

Atividade prática

• Utilizando do código já implementado em aula para o padrão “Method

Factory” onde se implementou múltiplos acesso a conexão com banco de

dados diferentes, implemente o padrão “Singleton” para deter de um

único ponto de acesso.

Atividade prática

• No nosso projeto “GranTurismo”, implemente o padrão “Singleton” para

tratar a instância da “Pista”.

• A atividade deverá ser entregue no nosso grupo do Edmodo,

na tarefa correspondente.

Page 4: 05 - Singleton

08/04/2015

4

Orientações de Estudo

• Para ampliar os seus conhecimentos sobre os assuntos

tratados nesta aula, visite os links a seguir:

• http://sourcemaking.com/design_patterns/singleton

• http://sourcemaking.com/design_patterns/singleton/p

hp/1

• http://php.net/manual/pt_BR/language.oop5.static.php

Bridge

Próxima Aula

Perguntas?Rodrigo Cezario da Silva

[email protected]