IngSW DP 02 DesignPatternCreazionaliDiagram
IngSW DP 02 DesignPatternCreazionaliDiagram
[email protected]
DESIGN PATTERN CREAZIONALI
Architetturali
Model view controller
Ingegneria del Sofware - Design Patern Alfredo Milani 2
INTRODUZIONE
Scopo dei design patern creazionali
Rendere un sistema indipendente
dall’implementazione concreta delle sue component
Si nascondono i tpi concret delle classi realmente utlizzate
Si nascondono i detagli sulla composizione e creazione
Motvazione
Alcune enttà NON DEVONO avere più di un’istanza
Non è possiiile utlizzare una variaiile gloiale (C++)
La classe deve tenere traccia della sua unica istanza
private
private Singleton()
Singleton() {{
/*
/* Corpo
Corpo vuoto
vuoto */
*/
}}
public
public static
static Singleton
Singleton
getInstance() {
getInstance() {
if
if (instance
(instance ==
== nul)
nul) {{
instance
instance ==
new
new Singleton();
Singleton();
}}
return
return instance;
instance;
}}
}}
Esempio
L’appoccio
L’appoccio non
non èè thread safe in
thread safe in
Java:
Java: nessuna
nessuna sincronizzazione
sincronizzazione
sulla
sulla creazione
creazione di
di instance
instance
utlizzat
/*
/* ...
... */
*/
public static Singleton }}
getInstance(String singletonName) {
return {
// Public methods and variables
publicMethod: function () {
console.log( "The public can see me!" );
},
getRandomNumber: function() { return privateRandomNumber; }
};
};
return {
getInstance: function () { Public
Public
if ( !instance ) { instance = init(); }
return instance;
functions/variables
functions/variables
}
}; })();
Il cassiere deve:
Inserire il panino
Inserire le patate
Inserire la fruta
...
Il
Il prodotto
prodotto complesso
complesso
da
da costruire
costruire
Costruisce
Costruisce ee assembla
assembla le le parti
parti del
del
prodotto.
prodotto. Tiene
Tiene traccia
traccia dell’istanza
dell’istanza
costruita.
costruita. Fornisce
Fornisce un’interfaccia
un’interfaccia per
per
recuperare
recuperare ilil prodotto
prodotto fnale
fnale
Ingegneria del Sofware - Design Patern Alfredo Milani 19
BUILDER
Esempio
Il client conosce
Il client conosce ilil tipo
tipo
builder concreto
builder concreto
Il director notifca
Il director notifca ilil
builder delle
builder delle parti
parti che
che
devono
devono essere
essere costruite
costruite
Il client recupera
Il client recupera dal
dal
builder concreto
builder concreto ilil
prodotto
prodotto fnito
fnito
$( '<div class="foo">bar</div>' );
$( "<input />" )
.attr({ "type": "text", "id":"sample"})
.appendTo("#container");
Type-safe builder
Type constraints
htp://ilog.rafaelferreira.net/200//0//type-safe-iuilder-pater
n-in-scala.html
htp
://www.tiali.com/java/type-safe-iuilder-scala-using-type-con
straints
/
Costruiscono
Costruiscono ii
prodotti
prodotti concreti
concreti
Defnisce
Defnisce un
un prodotto
prodotto
concreto,
concreto, che
che deve
deve
essere
essere costruito
costruito
mediante
mediante factory
factory
Ingegneria del Sofware - Design Patern Alfredo Milani 37
ABSTRACT FACTORY
Conseguenze
Esempio
Esempio
object Animal {
def apply(kind: String) = Equivale
Equivale aa
kind match { Animal(...)
Animal(...)
case "dog" => new Dog()
case "cat" => new Cat()
}
}
return {
getVehicle: function ( type, customizations ) {
var Vehicle = types[type];
return (Vehicle ? new Vehicle(customizations) : null);
},
registerVehicle: function ( type, Vehicle ) {
var proto = Vehicle.prototype;
if ( proto.drive && proto.breakDown ) {
types[type] = Vehicle;
}
return AbstractVehicleFactory; Registro
Registro solamente
solamente gli
gli
} oggetti
oggetti che
che soddisfano
soddisfano
}; un
un contratto
contratto (abstract
(abstract
})(); product)
product)
Ingegneria del Sofware - Design Patern Alfredo Milani 47
ABSTRACT FACTORY
Implementazione
htp://sourcemaiing.com/design_paterns
Java DP
htp://www.javacamp.org/designPatern/
Exploring the Decorator Patern in Javascript
htp://addyosmani.com/ilog/decorator-patern
/
Design Paterns in Scala htp://
pavelfatn.com/design-paterns-in-scala
Item 2: Consider a iuilder when faced with
Ingegneria del Sofware - Design Patern Alfredo Milani 49