Pengantar Pola Desain
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 45 dari 65.
pola desain adalah cara yang dikenal dan memiliki nama untuk mengatur class dalam menangani masalah yang berulang dari satu program ke program lainnya. Pola ini bukan library dan bukan kode untuk disalin: pola ini menjelaskan object apa saja yang ada, tanggung jawab masing-masing, dan cara mereka bekerja sama. Kamu menulis sendiri kodenya, disesuaikan dengan gamemu.
Pola juga memberi developer istilah yang sama. "Musuh berasal dari factory" atau "bilah kesehatan mengamati pemain" memberi tahu rekan satu tim bagaimana kode diatur sebelum mereka membuka file.
Berikut masalah yang dapat diatasi oleh sebuah pola. Memulai level berarti berkomunikasi dengan tiga object, dan setiap skrip yang memulai level mengulang baris-baris ini:
var music := MusicPlayer.new()
var level_map := LevelMap.new()
var hud := Hud.new()
music.play("forest.ogg")
level_map.load_map(1)
hud.show_hearts(3)Pola Facade menempatkan satu class di depan object-object tersebut dan memberinya satu method sederhana:
# game_facade.gd
class_name GameFacade
extends RefCounted
var music := MusicPlayer.new()
var level_map := LevelMap.new()
var hud := Hud.new()
func start_level(number: int) -> void:
music.play("forest.ogg")
level_map.load_map(number)
hud.show_hearts(3)# main.gd
var game := GameFacade.new()
game.start_level(1)Music: playing forest.ogg
Map: level 1 loaded
HUD: hearts 3Bagian lain dari program memanggil start_level(), dan saat cara memulai level berubah, kamu mengedit satu file.
Pola dikelompokkan berdasarkan masalah yang diselesaikannya:
- Pola kreasi mengatur cara object dibuat: Singleton, Factory.
- Pola struktural menggabungkan object menjadi struktur yang lebih besar: Facade, Adapter, Decorator, Composite.
- Pola perilaku mengatur cara object bekerja sama: Observer, Strategy, Command, Template Method, State.
Bab ini dan bab berikutnya membahas pola-pola ini. Setiap pola dibangun dari hal-hal yang sudah kamu ketahui: class di file masing-masing, pewarisan, polimorfisme, komposisi, dan sinyal.
Tantangan
MudahGame memulai dan mengakhiri level melalui tiga object yang sudah ditulis: MusicPlayer (music_player.gd), LevelMap (level_map.gd) dan Hud (hud.gd). Tulis facade GameFacade untuk menghubungkan ketiganya:
- Facade membuat satu
MusicPlayer, satuLevelMapdan satuHuddi variabel anggotanya. start_level(number, hearts)memutar tracklevel_N.ogg(N adalah nomor level), atauboss.oggjika nomornya kelipatan5, lalu memuat map level tersebut, kemudian menampilkan hearts.quit_level()menyembunyikan HUD, lalu menghentikan musik.
Kode yang disediakan membaca jumlah perintah berikutnya, lalu satu perintah di setiap baris: start NUMBER HEARTS atau quit. Untuk start 5 2 dan quit, output-nya adalah:
Music: playing boss.ogg
Map: level 5 loaded
HUD: hearts 2
HUD: hidden
Music: stoppedTulis kodemu di game_facade.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan apa adanya
var game := GameFacade.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "start":
game.start_level(int(parts[1]), int(parts[2]))
elif parts[0] == "quit":
game.quit_level()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online