Qual padrão de design é o oposto do padrão Factory?
-
07-07-2019 - |
Pergunta
Eu queria saber se existe um padrão oposto do padrão de fábrica. Por exemplo, quando um determinado necessidades objeto a ser excluído algumas necessidades extras de trabalho para ser feito, para desfazer a configuração que foi realizada no objeto de fábrica.
O alargamento do objeto de fábrica com um método Delete, por exemplo, parece errado, uma vez que o padrão de fábrica é um padrão criacional rigorosa.
Update: A razão pela qual eu estou usando uma fábrica é porque a configuração que precisa ser feito iria introduzir algumas dependências para o objeto que não caberia. Colocando essa configuração de no construtor iria causar o mesmo problema.
Solução
Isso é caminho certo para uso da fábrica. Fábrica não é única maneira de criar objetos, mas também a maneira de dizer: eu preciso de uma inicialização especial para este tipo de objectos. Com o seu problema Acho que a melhor solução seria a de notificar fábrica com algum evento, como descartado. Portanto, o seu criação do objeto será feito de tal forma a: criar, subscrever fábrica para evento de objeto recém-criado. Cada objeto de tempo é eliminado você`ll notificar fábrica sobre isso e executar a ação que você precisa.
Se você não gosta de colocar isso em fábrica, você pode delegá-la a algum tipo de outro objeto, como DeathKeeper ;-). Portanto, o seu código será sometihng assim:
//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);
return obj;
Agora, cada vez que você vai precisar para objeto de exclusão, o objeto irá notificar goleiro morte e faria toda a lógica dispor. By the way, eu não sei como tudo funciona, mas você pode usar a interface IDisposable para fazer a lógica personalizada para a eliminação recursos mantidos pelo objeto. A decisão depende what`s lá em seu projeto e é com você.
Outras dicas
Um repositório pode ser usado para excluir um objeto persistente, ou você pode usar o método de descarte para fazer uma limpeza em um na memória único objeto.
Eu uso um padrão de "Reciclagem Facility" trabalhando em conjunto com a fábrica:
- tem um método "limpa" para cada classe que pode ser reciclado
- ter uma "identificação única" para cada instância do objeto
Cada vez que um objeto atinge o seu fim-de-vida, enviá-lo para o "centro de reciclagem" (RF):
- As lojas RF do objeto de acordo com alguma política (por exemplo, manter apenas X instâncias de classe Y)
- Quando for necessária a uma instância da classe Y, o Factory "pede" a RF se o seu um tem
- Se a RF tem uma mão, o RF chama de "() limpa" método na instância e retorna para a Fábrica
... e assim por diante assim por diante.
Espero que isso ajude.