Montar script das intenções.
Falar como ler o livro e como vendo padrões similares você vai criando nexo entre eles e vendo pontos de vista diferente do padrão, acabando achando outras maneiras ou maneiras melhores de usar outro padrão. Outro padrão que as vezes pode ser similar ao que está lendo, não sobre somente o que está lendo.
FALAR DAS INTENÇÕES, QUE NÃO TEM EXEMPLO DE TUDO MAS DE ALGUNS PADRÕES
Também temos o chain of responsability que basicamente pode fazer a mesma coisa. Difereça que o decorator não pode quebrar o fluxo, como o chain of responsability pode. Falar do exemplo com JWT, para verificar se pode fazer aquilo ou não, que vai para o cara que ve se o cara tem permissão, outro para fazer a consulta e dai retornar.
Muito interessante nesta de mexer sem quebrar, dar uma olhada no adaptater e proxy.
Adapter é para quando você teum sistema que tratava tudo como XML, então vocÊ faz m adapter para começar a retornar JSON, sem mxer em nada na estrutura inicial, diferneça que vocÊ vai chamar o adapter que chama o XML e te retorna tratado.
O padrão bridge serve para quebrar em duas hearaquias duas classes intimamente ligadas. Exemplo seria você vai ter um controle remoto, que recebe no construtor o Device. Device que vai ser implementado em diferentes tipos, como radio e tv, ambos vão ter aqueles comandos de ligar, desligar, avançar e voltar que o controle espera ter para chamar. Também permite você pegar aquele controle remoto e extender em controle remoto avançado, que vai ser uma função extra. Então na hora que for usar esse controle remoto extra, é só usar ele invés do controle normal
Proxy por exemplo, você fez uma aplicação que não usava o cache. Porém agora precisa usar o cache, então uma solução seria você fazer um proxy que iria verificar se você tem o cache valido do id do que está buscando, se tiver retornar ele se não fazer uma nova req. para a classe de serviço. Nesse caso você chamaria GetVideoProxy().
O composite também é similar, por usar da composição recursiva. Você vai ter um função que você chama a draw, esse função vai chamar outra função draw (por exemplo) e vai indo... ALgo como um pedido, que tem notebook X com montior X de brinde, cada um dessses tem acessórios. Quando via acioniar a garantia, você vai assionar a garantia do pedido, que vai chamar o monitor, que vai cahamar a garantia do acessorio
→ Para formar um cubo voce precisa de 6 quadrados, que tem 2 triagulos cada e cada trinagulo tem 3 pontos
Já que esamos falando de trabalhar com algo que já existia, também tem o facade que as vezes você quer simplificar o uso de algo que já existe mas sem mecher na classe. Então você faz o facade, que antes você tinha que saber qual tipo de codec vídeo chamar. Então vocÊ cria um facade que vai receber o seu arquivo e ele vai tratar. Você tem isso em apenas um pedaço do código invés de cada vez que precisa de um codec ser tratado isso.
→ Quer manter inteface e ocultar a complexidade das classes que estão por tras desta classe.