Oi amigos! Com você, Alex e eu continuamos nossa série de artigos sobre o uso de padrões de projeto na linguagem Golang .
É interessante receber seu feedback, para entender o quão aplicável esta área do conhecimento é no mundo da língua Golang . Já vimos os modelos: Simple Factory , Singleton e Strategy . Hoje quero considerar outro padrão de design - Protótipo .
Para que é necessário?
É um padrão de design generativo que permite que os objetos sejam copiados sem entrar nos detalhes de sua implementação.
Qual problema isso resolve?
Imagine que você tem um objeto que precisa ser copiado. Como fazer isso? Crie um objeto vazio da mesma classe e, a seguir, copie os valores de todos os campos do objeto antigo para o novo, um por um. Tudo bem, mas há uma nuance! Nem todo objeto pode ser copiado dessa forma, porque parte de seu estado pode ser privado, o que significa que é inacessível para o resto do código do programa.
Também existe outro problema. O código de cópia ficará dependente das classes dos objetos copiados. Afinal, para iterar em todos os campos de um objeto, você precisa vincular a sua classe. Por isso, você não poderá copiar objetos conhecendo apenas suas interfaces e não classes específicas.
Qual é a solução?
O modelo Prototype instrui os próprios objetos de cópia a fazer cópias. Ele apresenta uma interface comum para todos os objetos que oferecem suporte à clonagem. Isso permite que os objetos sejam copiados sem serem vinculados às suas classes específicas. Normalmente, essa interface tem apenas um método de clone.
. . , . , , , . , . .
- . , , . -, , . . , , .
, . - clone. . . , , . , . .
?
- . , . .. , - . , . , - , , ..
- , . , , , ..
, , prototype
, clone
. struct
, show
clone
prototype
.
, . directory
, prototype
. . show
, clone
. clone
, - , . , _clone
.
. . , . :
Open directory 2 Directory 2 Directory 1 category 1 category 2 category 3 Clone and open directory 2 Directory 2_clone Directory 1_clone category 1_clone category 2_clone category 3_clone
?
. , . , -, . .
. , - , , . . , .
, Prototype :
.
, .
, abstract factory, .
, , . 63% , Golang - . , , , Golang - . , . , , .