ViniGodoy wrote:Ok, Sergio. Pode apenas me citar no livro do GoF, onde diz que o decorator precisa ter novos métodos para não ser um proxy?
Estou com ele aberto aqui e não achei.
E não vai achar mesmo. O GoF não é o unico catalogo de padrões do mundo.
Se fosse, o padrão Proxy não existiria pois não consta desse catálogo.
Como eu disse antes, se vc considerar que Decorator não envolve métodos a mais, então Decorator é a mesma coisa que Proxy. sem distinção. São dois nomes para a mesma coisa. Isso não faz muito sentido quando a mim.
Como eu tb já disse, eu não considero que sejam a mesma coisa, e portanto, quanto a mim sim existe uma distinção. E não sou o único.
http://powerdream5.wordpress.com/2007/11/17/the-differences-between-decorator-pattern-and-proxy-pattern/
Decorator Pattern focuses on dynamically adding functions to an object, while Proxy Pattern focuses on controlling access to an object
"Adding functions", não "adding functionality". (veja no diagrama que existe um método a mais chamado Adicionalbehavior)
Aliás, o próprio exemplo do livro do GoF envolve streams, e ele nem sequer dá a entender que métodos extras são necessários.
Porque ele não distinguem entre Decorator, Wrapper e Proxy. tudo bem se vc for por esse caminho, mas vc tem que explicitamente dizer isso, pois existe outra corrente dizendo que existem diferenças.
O decorator tem o papel de acrescentar funcionalidade.
A presença ou não de métodos adicionais não é obrigatória em nenhum dos casos.
O decorator tem a missão de adicional funções ( aka método) , não funcionalidade. Funcionalidade todos os padrões de encapsulamento acrescentam. (function, não "functionality")
Veja os diagramas sobre o decorator, sempre vc vai ver um método a mais que não existe na classe decorada. É esse método que é o objetivo do padrão. Acho que o site acima deixa clara a diferença, basta olhar os diagramas.