1. Apa itu Pola Mediator
Pola Mediator adalah pola desain perilaku yang mengurangi ketergantungan langsung antara objek dengan memindahkan komunikasi mereka ke objek mediator. Dalam Pola Mediator, objek tidak lagi berkomunikasi secara langsung satu sama lain, namun melalui objek mediator.
2. Karakteristik dan Keuntungan Pola Mediator
Karakteristik dan keuntungan dari Pola Mediator adalah sebagai berikut:
- Mengurangi keterikatan langsung antara objek, mengurangi kompleksitas sistem.
- Menyederhanakan komunikasi antara objek dengan membiarkan objek mediator mengelola komunikasi mereka.
- Mencentralisasikan kontrol interaksi antara objek, memudahkan perluasan dan pemeliharaan.
3. Contoh di Dunia Nyata dari Pola Mediator
Pola Mediator memiliki banyak aplikasi dalam skenario kehidupan nyata. Sebagai contoh, dalam sistem penjadwalan bandara, pengendali bertindak sebagai mediator, sementara modul-modul berbeda seperti pesawat terbang dan lalu lintas darat berperan sebagai kelas kolega yang berkomunikasi dan berkoordinasi melalui pengendali.
4. Implementasi Pola Mediator di Golang
4.1 Pengenalan Diagram Kelas UML
Berikut adalah diagram kelas UML untuk Pola Mediator di Golang:
4.2 Pengenalan Contoh
Dalam contoh ini, kita akan mengimplementasikan aplikasi ruang obrolan sederhana menggunakan Pola Mediator untuk mengelola komunikasi antara pengguna yang berbeda.
4.3 Langkah Implementasi 1: Mendefinisikan Antarmuka Mediator dan Mediator Konkrit
Pertama, kita mendefinisikan antarmuka mediator dan kelas mediator konkrit:
type Mediator interface {
registerColleague(colleague Colleague)
sendMessage(message string, colleague Colleague)
}
type ConcreteMediator struct {
colleagues map[string]Colleague
}
func (m *ConcreteMediator) registerColleague(colleague Colleague) {
m.colleagues[colleague.getName()] = colleague
}
func (m *ConcreteMediator) sendMessage(message string, colleague Colleague) {
for _, c := range m.colleagues {
if c != colleague {
c.receiveMessage(message)
}
}
}
4.4 Langkah Implementasi 2: Mendefinisikan Antarmuka Kolega dan Kolega Konkrit
Selanjutnya, kita mendefinisikan antarmuka kolega dan kelas kolega konkret:
type Colleague interface {
receiveMessage(message string)
sendMessage(message string)
getName() string
}
type ConcreteColleagueA struct {
mediator Mediator
name string
}
func (c *ConcreteColleagueA) receiveMessage(message string) {
fmt.Printf("%s menerima pesan: %s\n", c.name, message)
}
func (c *ConcreteColleagueA) sendMessage(message string) {
c.mediator.sendMessage(message, c)
}
func (c *ConcreteColleagueA) getName() string {
return c.name
}
type ConcreteColleagueB struct {
mediator Mediator
name string
}
func (c *ConcreteColleagueB) receiveMessage(message string) {
fmt.Printf("%s menerima pesan: %s\n", c.name, message)
}
func (c *ConcreteColleagueB) sendMessage(message string) {
c.mediator.sendMessage(message, c)
}
func (c *ConcreteColleagueB) getName() string {
return c.name
}
4.5 Langkah Implementasi 3: Mengelola Kolega di Mediator
Dalam kelas mediator spesifik, kita perlu mengimplementasikan metode registerColleague
dan metode sendMessage
untuk mengelola komunikasi antara kelas kolega:
func main() {
mediator := &ConcreteMediator{
colleagues: make(map[string]Colleague),
}
colleagueA := &ConcreteColleagueA{
mediator: mediator,
name: "Kolega A",
}
colleagueB := &ConcreteColleagueB{
mediator: mediator,
name: "Kolega B",
}
mediator.registerColleague(colleagueA)
mediator.registerColleague(colleagueB)
colleagueA.sendMessage("Halo, Dunia!")
colleagueB.sendMessage("Hai, ada di sana!")
}
Pada fungsi main
, kita membuat objek mediator spesifik dan dua objek kolega spesifik, kemudian mendaftarkan objek kolega melalui objek mediator dan melakukan pengujian komunikasi.