Prototype
Origem: Wikipédia, a enciclopédia livre.
Sinta-se livre para editá-la para que esta possa atingir um nível de qualidade superior.
Remova este aviso somente depois de todo o texto estar wikificado.
O padrão Prototype fornece uma outra maneira de se construir objetos de tipos arbitrários. Ao invés de passar um objeto BicycleFactory, um objeto Bicycle é recebido como argumento. Seu método clone() é invocado para criar novos objetos Bicycle; estamos construindo cópias do objeto fornecido.
class Bicycle {
Object clone() { ... }
}
class Frame {
Object clone() { ... }
}
class Wheel {
Object clone() { ... }
}
class RacingBicycle {
Object clone() { ... }
}
class RacingFrame {
Object clone() { ... }
}
class Whee1700c {
Object clone() { ... }
}
class MountainBicycle {
Object clone() { ... }
}
class MountainFrame {
Object clone() { ... }
}
class Whee126inch {
Object clone() { ... }
}
class Race {
Bicycle bproto; //construtor Race(Bicycle bproto) { this.bproto = bproto; }
Race createRace() { Bicycle bike1 = (Bicycle) bproto.clone(); Bicycle bike2 = (Bicycle) bproto.clone(); }
}
class TourDeFrance extends Race {
//construtor TourDeFrance(Bicycle bproto) { this.bproto = bproto; }
}
class Cyclocross extends Race {
//construtor Cyclocross(Bicycle bproto) { this.bproto = bproto; }
}
Efetivamente, cada objeto é, ele próprio, um Factory especializado em construir objetos iguais a si mesmo. Prototypes são utilizados freqüentemente em linguagens dinamicamente tipadas como Smalltalk, e menos freqüentemente utilizadas em linguagens estaticamente tipadas como C++ e Java.
No entanto, esta técnica tem um custo: o código para se criar objetos de uma classe particular deve estar em algum lugar. Métodos Factory colocam o código em métodos do cliente; objetos Factory colocam o código em métodos de um objeto Factory; e Prototypes colocam o código em métodos de clonagem.