Container pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
m Bot: fix wl, replaced: Design Patterns patterns → Design pattern |
||
(30 versioni intermedie di 14 utenti non mostrate) | |||
Riga 1:
{{S|
Il '''Container Pattern''' (anche detto Containment Pattern) è un modello specifico della [[programmazione ad oggetti]] che permette in certi casi una migliore gestione dell'[[Incapsulamento (informatica)|incapsulamento]]. Più che un costrutto, come ogni [[Design pattern]] il Container è una buona pratica da seguire per scrivere codice più intelligente e soprattutto sicuro.
== Funzionamento e Utilizzo ==
Il modello proposto risolve il problema del ''"cracking"'' (della rottura) dell'Incapsulamento in situazioni di [[
== Esempio ==
Nell'esempio proposto, scritto in [[C sharp|C#]], si vuole estendere il metodo ''drinkSomething'' della classe Guy. Qui di seguito è mostrata la soluzione con l'uso di una classe derivata.
[[Categoria:Pattern]]▼
<syntaxhighlight lang="csharp">
class Guy
{
//Campi della classe e costruttore
//...
//Metodo dichiarato virtual
public virtual void drinkSomething()
{
//algoritmo base
Console.WriteLine("I really like it! Thank you!");
}
//...
}
//Pratica consueta: ereditarietà
//Derivo dalla classe Guy
class Gentleman : Guy
{
//Chiamata al costruttore (base)
//...
public override void drinkSomething()
{
//chiamata al metodo della classe madre
//algoritmo base
base.drinkSomething();
//aggiunta
Console.WriteLine("Would you like some?");
}
//...
}
</syntaxhighlight>
Questa invece è la risoluzione del problema con l'uso del Container Pattern. È sottinteso che il metodo ''drinkSomething'' non sia più dichiarato virtual.
<syntaxhighlight lang="csharp">
class Gentleman
{
//Chiamata al costruttore (base)
//Campo della classe Gentleman:
//istanza della classe Guy
Guy johnny = new Guy();
//...
public void drinkSomething()
{
//chiamata al metodo della classe madre
//algoritmo base
johnny.drinkSomething();
//aggiunta
Console.WriteLine("Would you like some?");
}
//...
}
</syntaxhighlight>
== Collegamenti esterni ==
[http://martinfowler.com/articles/injection.html Inversion of Control Containers and the Dependency Injection pattern] di [[Martin Fowler]] articolo in cui viene introdotto il pattern dell'inversione di controllo e la soluzione mediante container
{{Design pattern}}
<!-- Fumo -->
{{Portale|informatica}}
|