-
Notifications
You must be signed in to change notification settings - Fork 0
/
factory.ts
98 lines (59 loc) · 3.99 KB
/
factory.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*===========================================================================================================
Factory:
Propósito: Definir una interfaz para crear un objeto, pero dejar que las subclases alteren el tipo de objetos que se crearán.
Implementación: Se crea una interfaz común para la creación de objetos, y las clases concretas implementan esta interfaz para crear objetos específicos.
Ejemplo de uso: Útil cuando una clase no puede anticipar la clase de objetos que debe crear.
===========================================================================================================*/
/* Vamos a crear un ejemplo simple de un patrón de diseño Factory en TypeScript. Imaginemos que tenemos un sistema de creación de vehículos, y queremos usar el patrón Factory para crear instancias de diferentes tipos de vehículos (coche, bicicleta, motocicleta, etc.). */
// Interfaz que define la estructura común para todos los vehículos
interface Vehicle {
start(): void;
stop(): void;
}
// Implementación concreta de un tipo de vehículo: Coche
class Car implements Vehicle {
start(): void {
console.log("Coche arrancado");
}
stop(): void {
console.log("Coche detenido");
}
}
// Implementación concreta de otro tipo de vehículo: Bicicleta
class Bicycle implements Vehicle {
start(): void {
console.log("Bicicleta en marcha");
}
stop(): void {
console.log("Bicicleta detenida");
}
}
// Factoría que crea instancias de diferentes tipos de vehículos
class VehicleFactory {
createVehicle(type: string): Vehicle {
switch (type.toLowerCase()) {
case "car":
return new Car();
case "bicycle":
return new Bicycle();
default:
throw new Error("Tipo de vehículo desconocido");
}
}
}
// Uso del patrón Factory
const factory = new VehicleFactory();
// Creación de un coche
const car = factory.createVehicle("car");
car.start();
car.stop();
// Creación de una bicicleta
const bicycle = factory.createVehicle("bicycle");
bicycle.start();
bicycle.stop();
/* En este ejemplo, la interfaz Vehicle define los métodos comunes para todos los vehículos, y las clases Car y Bicycle implementan esta interfaz. La clase VehicleFactory actúa como la factoría que crea instancias de diferentes tipos de vehículos según el tipo especificado. */
/* Al crear instancias de vehículos a través de la factoría, podemos centralizar la lógica de creación y hacer que el código sea más modular y fácil de mantener. Además, si en el futuro queremos agregar nuevos tipos de vehículos, simplemente agregamos una nueva clase e actualizamos la factoría sin tener que cambiar el código que utiliza la factoría. */
/* Entonces deja ver si lo tengo claro, el patron de diseñ factory es para crear instancias dependiendo de lo que elija el usuario? */
/* Sí, has captado la esencia del patrón de diseño Factory. El patrón Factory se utiliza para encapsular la lógica de creación de objetos y proporcionar una interfaz común para crear diferentes tipos de objetos. En tu ejemplo, la factoría (VehicleFactory) tiene un método (createVehicle) que toma un parámetro (en este caso, el tipo de vehículo) y devuelve una instancia del tipo de objeto correspondiente. */
/* Este enfoque es beneficioso cuando hay múltiples implementaciones de una interfaz o clase base, y la elección de cuál instancia crear depende de algún criterio, como la entrada del usuario, configuración o condiciones en tiempo de ejecución. La factoría maneja los detalles de cómo crear y devolver la instancia correcta, permitiendo que el código que utiliza la factoría se mantenga desacoplado de los detalles de implementación específicos de cada clase. */
/* En resumen, el patrón Factory es una forma de centralizar la creación de objetos y proporcionar una interfaz unificada para crear instancias de diferentes tipos de objetos, según las necesidades del sistema. */