Skip to content

Commit 982526f

Browse files
authored
translation: Translate to Spanish (iluwatar#2893)
* Translate Iterator pattern to Spanish * Translate to Spanish: Servant pattern Sharding pattern Spatial-partition pattern Special-case pattern specification pattern State pattern Strategy pattern Subclass-case pattern * Update language to es * Fixing Missing translation
1 parent 423efcf commit 982526f

File tree

16 files changed

+1380
-0
lines changed

16 files changed

+1380
-0
lines changed

localization/es/servant/README.md

+235
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
---
2+
title: Servant
3+
category: Behavioral
4+
language: es
5+
tag:
6+
- Decoupling
7+
---
8+
9+
## Propósito
10+
Servant se utiliza para proporcionar algún comportamiento a un grupo de clases.
11+
En lugar de definir ese comportamiento en cada clase - o cuando no podemos factorizar
12+
este comportamiento en la clase padre común - se define una vez en el Servant.
13+
14+
## Explicación
15+
16+
Ejemplo del mundo real
17+
18+
> El Rey, la Reina y otros miembros reales de palacio necesitan sirvientes que les den de comer,
19+
> organizar bebidas, etc.
20+
21+
En otras palabras
22+
23+
> Garantiza que un objeto servidor preste determinados servicios a un grupo de clases atendidas.
24+
25+
Wikipedia dice
26+
27+
> En ingeniería de software, el patrón Servant define un objeto utilizado para ofrecer alguna funcionalidad
28+
> a un grupo de clases sin definir esa funcionalidad en cada una de ellas. Un Servant es una clase
29+
> cuya instancia (o incluso sólo clase) proporciona métodos que se encargan de un servicio deseado, mientras que
30+
> los objetos para los que (o con los que) el Servant hace algo, se toman como parámetros.
31+
32+
**Ejemplo programático**
33+
34+
La clase Servant puede prestar servicios a otros miembros reales de palacio.
35+
36+
```java
37+
/**
38+
* Servant.
39+
*/
40+
public class Servant {
41+
42+
public String name;
43+
44+
/**
45+
* Constructor.
46+
*/
47+
public Servant(String name) {
48+
this.name = name;
49+
}
50+
51+
public void feed(Royalty r) {
52+
r.getFed();
53+
}
54+
55+
public void giveWine(Royalty r) {
56+
r.getDrink();
57+
}
58+
59+
public void giveCompliments(Royalty r) {
60+
r.receiveCompliments();
61+
}
62+
63+
/**
64+
* Check if we will be hanged.
65+
*/
66+
public boolean checkIfYouWillBeHanged(List<Royalty> tableGuests) {
67+
return tableGuests.stream().allMatch(Royalty::getMood);
68+
}
69+
}
70+
```
71+
72+
Royalty es una interfaz. Es implementada por las clases King, y Queen para obtener servicios de servant.
73+
74+
```java
75+
interface Royalty {
76+
77+
void getFed();
78+
79+
void getDrink();
80+
81+
void changeMood();
82+
83+
void receiveCompliments();
84+
85+
boolean getMood();
86+
}
87+
```
88+
La clase King implementa la interfaz Royalty.
89+
```java
90+
public class King implements Royalty {
91+
92+
private boolean isDrunk;
93+
private boolean isHungry = true;
94+
private boolean isHappy;
95+
private boolean complimentReceived;
96+
97+
@Override
98+
public void getFed() {
99+
isHungry = false;
100+
}
101+
102+
@Override
103+
public void getDrink() {
104+
isDrunk = true;
105+
}
106+
107+
public void receiveCompliments() {
108+
complimentReceived = true;
109+
}
110+
111+
@Override
112+
public void changeMood() {
113+
if (!isHungry && isDrunk) {
114+
isHappy = true;
115+
}
116+
if (complimentReceived) {
117+
isHappy = false;
118+
}
119+
}
120+
121+
@Override
122+
public boolean getMood() {
123+
return isHappy;
124+
}
125+
}
126+
```
127+
La clase Queen implementa la interfaz Royalty.
128+
```java
129+
public class Queen implements Royalty {
130+
131+
private boolean isDrunk = true;
132+
private boolean isHungry;
133+
private boolean isHappy;
134+
private boolean isFlirty = true;
135+
private boolean complimentReceived;
136+
137+
@Override
138+
public void getFed() {
139+
isHungry = false;
140+
}
141+
142+
@Override
143+
public void getDrink() {
144+
isDrunk = true;
145+
}
146+
147+
public void receiveCompliments() {
148+
complimentReceived = true;
149+
}
150+
151+
@Override
152+
public void changeMood() {
153+
if (complimentReceived && isFlirty && isDrunk && !isHungry) {
154+
isHappy = true;
155+
}
156+
}
157+
158+
@Override
159+
public boolean getMood() {
160+
return isHappy;
161+
}
162+
163+
public void setFlirtiness(boolean f) {
164+
this.isFlirty = f;
165+
}
166+
167+
}
168+
```
169+
170+
Luego:
171+
172+
```java
173+
public class App {
174+
175+
private static final Servant jenkins = new Servant("Jenkins");
176+
private static final Servant travis = new Servant("Travis");
177+
178+
/**
179+
* Program entry point.
180+
*/
181+
public static void main(String[] args) {
182+
scenario(jenkins, 1);
183+
scenario(travis, 0);
184+
}
185+
186+
/**
187+
* Can add a List with enum Actions for variable scenarios.
188+
*/
189+
public static void scenario(Servant servant, int compliment) {
190+
var k = new King();
191+
var q = new Queen();
192+
193+
var guests = List.of(k, q);
194+
195+
// feed
196+
servant.feed(k);
197+
servant.feed(q);
198+
// serve drinks
199+
servant.giveWine(k);
200+
servant.giveWine(q);
201+
// compliment
202+
servant.giveCompliments(guests.get(compliment));
203+
204+
// outcome of the night
205+
guests.forEach(Royalty::changeMood);
206+
207+
// check your luck
208+
if (servant.checkIfYouWillBeHanged(guests)) {
209+
LOGGER.info("{} will live another day", servant.name);
210+
} else {
211+
LOGGER.info("Poor {}. His days are numbered", servant.name);
212+
}
213+
}
214+
}
215+
```
216+
217+
La salida de la consola
218+
219+
```
220+
Jenkins will live another day
221+
Poor Travis. His days are numbered
222+
```
223+
224+
225+
## Diagrama de clases
226+
![alt text](./etc/servant-pattern.png "Servant")
227+
228+
## Aplicabilidad
229+
Utiliza el patrón Servant cuando
230+
231+
* Cuando queremos que algunos objetos realicen una acción común y no queremos definir esta acción como un método en cada clase.
232+
233+
## Créditos
234+
235+
* [Let's Modify the Objects-First Approach into Design-Patterns-First](http://edu.pecinovsky.cz/papers/2006_ITiCSE_Design_Patterns_First.pdf)
29.4 KB
Loading

localization/es/sharding/README.md

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
title: Sharding
3+
category: Behavioral
4+
language: es
5+
tag:
6+
- Performance
7+
- Cloud distributed
8+
---
9+
10+
## Propósito
11+
El patrón sharding significa dividir el almacén de datos en particiones horizontales o shards. Cada fragmento tiene el mismo esquema, pero contiene su propio subconjunto de datos.
12+
Un fragmento es un almacén de datos en sí mismo (puede contener los datos de muchas entidades de diferentes tipos), que se ejecuta en un servidor que actúa como nodo de almacenamiento.
13+
14+
## Diagrama de clases
15+
![alt text](./etc/sharding.urm.png "Sharding pattern class diagram")
16+
17+
## Aplicabilidad
18+
Este patrón ofrece las siguientes ventajas:
19+
20+
- Se puede ampliar el sistema añadiendo más fragmentos que se ejecuten en nodos de almacenamiento adicionales.
21+
- El sistema puede utilizar hardware comercial en lugar de ordenadores especializados (y caros) para cada nodo de almacenamiento.
22+
- Se puede reducir la contención y mejorar el rendimiento equilibrando la carga de trabajo entre los shards.
23+
- En la nube, los shards pueden ubicarse físicamente cerca de los usuarios que accederán a los datos.
24+
25+
## Créditos
26+
27+
* [Sharding pattern](https://docs.microsoft.com/en-us/azure/architecture/patterns/sharding)
62.3 KB
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
---
2+
title: Spatial Partition
3+
category: Behavioral
4+
language: es
5+
tag:
6+
- Performance
7+
- Game programming
8+
---
9+
10+
## Propósito
11+
12+
Como se explica en el libro [Game Programming Patterns](http://gameprogrammingpatterns.com/spatial-partition.html)
13+
por Bob Nystrom, spatial partition pattern ayuda a localizar eficazmente los objetos almacenándolos en una
14+
estructura de datos organizada por sus posiciones.
15+
16+
## Explicación
17+
18+
Digamos que usted está construyendo un juego de guerra con cientos, o incluso miles de jugadores, que se enfrentan en el campo de batalla.
19+
La posición de cada jugador se actualiza en cada fotograma. La forma más sencilla de manejar
20+
todas las interacciones que tienen lugar en el campo es comprobar la posición de cada jugador con la de todos los demás.
21+
posición de cada jugador:
22+
23+
```java
24+
public void handleMeLee(Unit units[], int numUnits) {
25+
for (var a = 0; a < numUnits - 1; a++)
26+
{
27+
for (var b = a + 1; b < numUnits; b++)
28+
{
29+
if (units[a].position() == units[b].position())
30+
{
31+
handleAttack(units[a], units[b]);
32+
}
33+
}
34+
}
35+
}
36+
```
37+
38+
Esto incluirá un montón de controles innecesarios entre jugadores que están demasiado alejados como para tener alguna
39+
influencia entre ellos. Los bucles anidados dan a esta operación una complejidad O(n^2), que tiene que ser
40+
cada fotograma, ya que muchos de los objetos del campo pueden moverse en cada fotograma. La idea
41+
detrás del patrón de diseño de Partición Espacial es permitir una rápida localización de los objetos utilizando una estructura de datos que está organizada por sus posiciones.
42+
que está organizada por sus posiciones, de modo que cuando se realiza una operación como la anterior,
43+
no es necesario cotejar la posición de cada objeto con la de todos los demás. La estructura de datos
44+
puede utilizarse para almacenar objetos en movimiento y estáticos, aunque para seguir la pista de los objetos en movimiento,
45+
sus posiciones tendrán que restablecerse cada vez que se muevan. Esto significaría tener que crear una nueva
46+
instancia de la estructura de datos cada vez que un objeto se mueva, lo que consumiría memoria adicional. La dirección
47+
estructuras de datos comunes utilizadas para este patrón de diseño son:
48+
49+
* Grid
50+
* Árbol Quad
51+
* Árbol K-d
52+
* BSP
53+
* Jerarquía de volúmenes límite
54+
55+
En nuestra implementación, utilizamos la estructura de datos Quadtree que reducirá la complejidad temporal de
56+
O(n^2) a O(nlogn), lo que reduce significativamente los cálculos necesarios en el caso de un gran número de objetos.
57+
significativamente en el caso de un gran número de objetos.
58+
59+
## Diagrama de clases
60+
61+
![alt text](./etc/spatial-partition.urm.png "Spatial Partition pattern class diagram")
62+
63+
## Aplicabilidad
64+
65+
Utilice el patrón Spatial Partition cuando:
66+
67+
* Cuando se necesita mantener un registro de un gran número de posiciones de objetos, que se actualizan cada fotograma.
68+
* Cuando es aceptable cambiar memoria por velocidad, ya que la creación y actualización de la estructura de datos consumirá memoria extra.
69+
70+
## Créditos
71+
72+
* [Game Programming Patterns/Spatial Partition](http://gameprogrammingpatterns.com/spatial-partition.html) por Bob Nystrom
73+
* [Quadtree tutorial](https://www.youtube.com/watch?v=OJxEcs0w_kE) por Daniel Schiffman
Loading

0 commit comments

Comments
 (0)