Skip to content

Commit 52765eb

Browse files
authored
translation: Translate Proxy Pattern to portuguese. (iluwatar#2723)
1 parent ab23eb1 commit 52765eb

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed

localization/pt/proxy/README.md

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
---
2+
title: Proxy
3+
category: Structural
4+
language: pt
5+
tag:
6+
- Gang Of Four
7+
- Decoupling
8+
---
9+
10+
## Também conhecido como
11+
12+
Surrogate
13+
14+
## Propósito
15+
16+
Fornecer um substituto para controlar o acesso ao objeto original
17+
18+
## Explicação
19+
20+
Exemplo de mundo real
21+
22+
> Imagine uma torre onde magos locais vão estudar os seus feitiços. A torre de marfim consegue ser
23+
> acedida através de uma proxy que garante que apenas os três primeiros magos podem entrar. Aqui a proxy
24+
> representa a funcionalidade da torre e adiciona controlo de acesso a ela.
25+
26+
Em palavras simples
27+
28+
> Usando um padrão proxy, a classe representa a funcionalidade de uma outra classe.
29+
30+
Wikipedia diz
31+
32+
> Uma proxy, na sua forma mais genérica, é uma classe a funcionar como interface para algo.
33+
> Uma proxy é um wrapper ou objeto agente que está a ser chamado pelo cliente para aceder ao verdadeiro
34+
> objeto por detrás das cortinas. O uso de uma proxy pode ser apenas redirecionar para o objeto real, ou
35+
> pode fornecer lógica adicional. Numa proxy, funcionalidade extra também pode ser fornecida, por exemplo apanhar
36+
> operações no objeto real que gastam muitos recursos, ou verificar precondições antes
37+
> das operações no objeto real serem invocadas.
38+
39+
**Exemplos de programação**
40+
41+
Usando a nossa torre de magos do exemplo acima. Primeiro temos a interface `WizardTower` e a classe
42+
`IvoryTower`.
43+
44+
```java
45+
public interface WizardTower {
46+
47+
void enter(Wizard wizard);
48+
}
49+
50+
@Slf4j
51+
public class IvoryTower implements WizardTower {
52+
53+
public void enter(Wizard wizard) {
54+
LOGGER.info("{} enters the tower.", wizard);
55+
}
56+
57+
}
58+
```
59+
60+
Depois uma simples classe `Wizard`.
61+
62+
```java
63+
public class Wizard {
64+
65+
private final String name;
66+
67+
public Wizard(String name) {
68+
this.name = name;
69+
}
70+
71+
@Override
72+
public String toString() {
73+
return name;
74+
}
75+
}
76+
```
77+
78+
Depois temos a `WizardTowerProxy` para adicionar controlo à `WizardTower`.
79+
80+
```java
81+
@Slf4j
82+
public class WizardTowerProxy implements WizardTower {
83+
84+
private static final int NUM_WIZARDS_ALLOWED = 3;
85+
86+
private int numWizards;
87+
88+
private final WizardTower tower;
89+
90+
public WizardTowerProxy(WizardTower tower) {
91+
this.tower = tower;
92+
}
93+
94+
@Override
95+
public void enter(Wizard wizard) {
96+
if (numWizards < NUM_WIZARDS_ALLOWED) {
97+
tower.enter(wizard);
98+
numWizards++;
99+
} else {
100+
LOGGER.info("{} is not allowed to enter!", wizard);
101+
}
102+
}
103+
}
104+
```
105+
106+
E aqui está a torre a entrar em cenário.
107+
108+
```java
109+
var proxy = new WizardTowerProxy(new IvoryTower());
110+
proxy.enter(new Wizard("Red wizard"));
111+
proxy.enter(new Wizard("White wizard"));
112+
proxy.enter(new Wizard("Black wizard"));
113+
proxy.enter(new Wizard("Green wizard"));
114+
proxy.enter(new Wizard("Brown wizard"));
115+
```
116+
117+
Saída do programa:
118+
119+
```
120+
Red wizard enters the tower.
121+
White wizard enters the tower.
122+
Black wizard enters the tower.
123+
Green wizard is not allowed to enter!
124+
Brown wizard is not allowed to enter!
125+
```
126+
127+
## Diagrama de classes
128+
129+
![alt text](./etc/proxy.urm.png "Diagrama de classes do padrão proxy")
130+
131+
## Aplicabilidade
132+
133+
O proxy é aplicável quando existe a necessidade de uma referência a um objeto mais versátil ou sofisticada em vez de um simples ponteiro. Aqui estão várias situações comuns em que o padrão Proxy é aplicável.
134+
135+
* Proxy remoto dá uma representação local de um objeto num espaço de endereçamento diferente.
136+
* Proxy virtual cria objetos dispendiosos quando requisitado.
137+
* Proxy de proteção controla o acesso ao objeto original. Proxies de proteção são úteis quando objetos deviam ter direitos de acesso diferentes.
138+
139+
Tipicamente, o padrão proxy é usado para
140+
141+
* Controlar acesso a um outro objeto
142+
* Inicialização preguiçosa
143+
* Implementar um registro de eventos (logging)
144+
* Facilitar a conexão com a rede
145+
* Contar o número de referências para um objeto
146+
147+
## Tutoriais
148+
149+
* [Controlar acesso com um padrão Proxy](http://java-design-patterns.com/blog/controlling-access-with-proxy-pattern/)
150+
151+
## Usos conhecidos
152+
153+
* [java.lang.reflect.Proxy](http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Proxy.html)
154+
* [Apache Commons Proxy](https://commons.apache.org/proper/commons-proxy/)
155+
* Frameworks para Mocking [Mockito](https://site.mockito.org/),
156+
[Powermock](https://powermock.github.io/), [EasyMock](https://easymock.org/)
157+
* UIKit's da Apple [UIAppearance](https://developer.apple.com/documentation/uikit/uiappearance)
158+
159+
## Padrões relacionados
160+
161+
* [Ambassador](https://java-design-patterns.com/patterns/ambassador/)
162+
163+
## Créditos
164+
165+
* [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/gp/product/0201633612/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0201633612&linkCode=as2&tag=javadesignpat-20&linkId=675d49790ce11db99d90bde47f1aeb59)
166+
* [Head First Design Patterns: A Brain-Friendly Guide](https://www.amazon.com/gp/product/0596007124/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596007124&linkCode=as2&tag=javadesignpat-20&linkId=6b8b6eea86021af6c8e3cd3fc382cb5b)

0 commit comments

Comments
 (0)