Skip to content

Commit a2d8993

Browse files
authored
translation: added for Indonesian decorator pattern iluwatar#2280 (iluwatar#2620)
1 parent 4c9b80b commit a2d8993

File tree

2 files changed

+169
-0
lines changed

2 files changed

+169
-0
lines changed
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
---
2+
title: Decorator
3+
category: Structural
4+
language: id
5+
tag:
6+
- Gang of Four
7+
- Extensibility
8+
---
9+
10+
## Juga dikenal sebagai
11+
12+
Pembungkus
13+
14+
## Tujuan
15+
16+
Menyematkan tanggung jawab tambahan ke suatu objek secara dinamis. Dekorator memberikan alternatif yang fleksibel terhadap subkelas untuk memperluas fungsionalitas.
17+
18+
## Penjelasan
19+
20+
Contoh dunia nyata
21+
22+
> Ada troll pemarah yang tinggal di perbukitan terdekat. Biasanya ia pergi dengan tangan kosong, tetapi terkadang ia
23+
> punya senjata. Untuk mempersenjatai troll, Anda tidak perlu membuat troll baru, melainkan mendekorasinya
24+
> secara dinamis dengan senjata yang sesuai.
25+
26+
Dengan kata sederhana
27+
28+
> Pola dekorator memungkinkan Anda mengubah perilaku objek secara dinamis saat run time dengan membungkus
29+
> mereka dalam objek kelas dekorator.
30+
31+
Wikipedia(en) mengatakan
32+
33+
> Dalam pemrograman berorientasi objek, pola dekorator adalah pola desain yang memungkinkan perilaku
34+
> ditambahkan ke objek individual, baik secara statis maupun dinamis, tanpa memengaruhi perilaku
35+
> objek lain dari kelas yang sama. Pola dekorator sering kali berguna untuk mematuhi Prinsip Tanggung
36+
> Jawab Tunggal, karena memungkinkan fungsionalitas dibagi antara kelas-kelas dengan area perhatian yang
37+
> unik serta Prinsip Terbuka-Tertutup, dengan memungkinkan fungsionalitas suatu kelas diperluas tanpa diubah.
38+
39+
**Contoh Program**
40+
41+
Mari kita ambil contoh troll. Pertama-tama kita memiliki `SimpleTroll` yang mengimplementasikan antarmuka
42+
`Troll`:
43+
44+
```java
45+
public interface Troll {
46+
void attack();
47+
int getAttackPower();
48+
void fleeBattle();
49+
}
50+
51+
@Slf4j
52+
public class SimpleTroll implements Troll {
53+
54+
@Override
55+
public void attack() {
56+
LOGGER.info("Troll itu mencoba menangkapmu!");
57+
}
58+
59+
@Override
60+
public int getAttackPower() {
61+
return 10;
62+
}
63+
64+
@Override
65+
public void fleeBattle() {
66+
LOGGER.info("Troll itu menjerit ketakutan dan melarikan diri!");
67+
}
68+
}
69+
```
70+
71+
Kemudian kita ingin menambahkan gada untuk troll tersebut. Kita dapat melakukannya secara dinamis dengan menggunakan dekorator:
72+
73+
```java
74+
@Slf4j
75+
public class ClubbedTroll implements Troll {
76+
77+
private final Troll decorated;
78+
79+
public ClubbedTroll(Troll decorated) {
80+
this.decorated = decorated;
81+
}
82+
83+
@Override
84+
public void attack() {
85+
decorated.attack();
86+
LOGGER.info("Troll itu mengayunkan gada ke arahmu!");
87+
}
88+
89+
@Override
90+
public int getAttackPower() {
91+
return decorated.getAttackPower() + 10;
92+
}
93+
94+
@Override
95+
public void fleeBattle() {
96+
decorated.fleeBattle();
97+
}
98+
}
99+
```
100+
101+
Berikut aksi troll tersebut:
102+
103+
```java
104+
// simple troll
105+
LOGGER.info("Troll biasa mendekat.");
106+
var troll = new SimpleTroll();
107+
troll.attack();
108+
troll.fleeBattle();
109+
LOGGER.info("Kekuatan troll sederhana: {}.\n", troll.getAttackPower());
110+
111+
// change the behavior of the simple troll by adding a decorator
112+
LOGGER.info("Troll dengan gada besar mengejutkanmu.");
113+
var clubbedTroll = new ClubbedTroll(troll);
114+
clubbedTroll.attack();
115+
clubbedTroll.fleeBattle();
116+
LOGGER.info("Kekuatan troll dengan gada: {}.\n", clubbedTroll.getAttackPower());
117+
```
118+
119+
Output program:
120+
121+
```java
122+
Troll biasa mendekat.
123+
Troll itu mencoba menangkapmu!
124+
Troll itu menjerit ketakutan dan melarikan diri!
125+
Kekuatan troll sederhana: 10.
126+
127+
Troll dengan gada besar mengejutkanmu.
128+
Troll itu mencoba menangkapmu!
129+
Troll itu mengayunkan gada ke arahmu!
130+
Troll itu menjerit ketakutan dan melarikan diri!
131+
Kekuatan troll dengan gada: 20.
132+
```
133+
134+
## Diagram kelas
135+
136+
![alt text](./etc/decorator.urm.png "Diagram kelas pola dekorator")
137+
138+
## Penerapan
139+
140+
Dekorator digunakan untuk:
141+
142+
* Tambahkan tanggung jawab ke objek individual secara dinamis dan transparan, tanpa
143+
memengaruhi objek lain.
144+
* Untuk tanggung jawab yang dapat ditarik/dihapus.
145+
* Dimana ekstensi dengan subkelas tidak praktis; Ketika sejumlah besar ekstensi independen
146+
mungkin dilakukan dan akan menghasilkan ledakan subkelas untuk mendukung setiap kombinasi, atau definisi
147+
kelas mungkin tersembunyi dan/atau tidak tersedia untuk subkelas.
148+
149+
## Tutorial
150+
151+
* [Tutorial Pola Dekorator](https://www.journaldev.com/1540/decorator-design-pattern-in-java-example)
152+
153+
## Kegunaan yang diketahui
154+
155+
* [java.io.InputStream](http://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html), [java.io.OutputStream](http://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html),
156+
[java.io.Reader](http://docs.oracle.com/javase/8/docs/api/java/io/Reader.html) dan [java.io.Writer](http://docs.oracle.com/javase/8/docs/api/java/io/Writer.html)
157+
* [java.util.Collections#synchronizedXXX()](http://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#synchronizedCollection-java.util.Collection-)
158+
* [java.util.Collections#unmodifiableXXX()](http://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#unmodifiableCollection-java.util.Collection-)
159+
* [java.util.Collections#checkedXXX()](http://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#checkedCollection-java.util.Collection-java.lang.Class-)
160+
161+
162+
## Kredit
163+
164+
* [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)
165+
* [Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions](https://www.amazon.com/gp/product/1937785467/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1937785467&linkCode=as2&tag=javadesignpat-20&linkId=7e4e2fb7a141631491534255252fd08b)
166+
* [J2EE Design Patterns](https://www.amazon.com/gp/product/0596004273/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596004273&linkCode=as2&tag=javadesignpat-20&linkId=48d37c67fb3d845b802fa9b619ad8f31)
167+
* [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)
168+
* [Refactoring to Patterns](https://www.amazon.com/gp/product/0321213351/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321213351&linkCode=as2&tag=javadesignpat-20&linkId=2a76fcb387234bc71b1c61150b3cc3a7)
169+
* [J2EE Design Patterns](https://www.amazon.com/gp/product/0596004273/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596004273&linkCode=as2&tag=javadesignpat-20&linkId=f27d2644fbe5026ea448791a8ad09c94)
23 KB
Loading

0 commit comments

Comments
 (0)