Şablon Metot Kalıbı
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 53 / 65.
Şablon Metot deseni, bir algoritmanın adımlarının sırasını üst sınıfta belirler ve her alt sınıfın adımların bazılarını tamamlamasına olanak tanır. Adımları çalıştıran üst sınıf metodu, şablon metottur.
# level.gd
@abstract
class_name Level
extends RefCounted
func play() -> void:
print("Loading ", get_level_name())
spawn_enemies()
print("Level complete!")
@abstract func get_level_name() -> String
@abstract func spawn_enemies() -> voidplay() şablondur: her seviye bu sırayla yüklenir, düşmanlarını oluşturur ve tamamlanır. Farklılık gösteren adımlar soyuttur, bu nedenle her alt sınıf bunları yazmalıdır:
# forest_level.gd
class_name ForestLevel
extends Level
func get_level_name() -> String:
return "Forest"
func spawn_enemies() -> void:
print("3 wolves appear")CaveLevel aynı şekilde, "Cave" adıyla ve 5 bats appear ifadesiyle yazılır.
# main.gd
var levels: Array[Level] = [ForestLevel.new(), CaveLevel.new()]
for level in levels:
level.play()Loading Forest
3 wolves appear
Level complete!
Loading Cave
5 bats appear
Level complete!Bir adımın, alt sınıfın geçersiz kılabileceği bir üst sınıf varsayılanı da olabilir. Böyle isteğe bağlı bir adıma kanca denir:
# level.gd
func play() -> void:
print("Loading ", get_level_name())
spawn_enemies()
if has_boss():
print("The boss arrives")
print("Level complete!")
func has_boss() -> bool:
return falseYalnızca has_boss() metodunu true döndürecek şekilde geçersiz kılan bir seviye, patron satırını alır. Alt sınıflar adımları yazar, üst sınıf ise bunların ne zaman çalışacağına karar verir; bu nedenle bir alt sınıf play() metoduna dokunmaz ve her seviye aynı sırayı izler.
Görev
OrtaBir oyun, puanlarını aynı adımları izleyerek iki biçimde dışa aktarır. Satırlar, "name" ve "score" içeren Dictionary'lerdir.
exporter.gddosyasında, şablon yöntemiexport_rows(rows)'u yaz:header()'ı, ardından her satır içinformat_row(row)'u ve son olarakfooter(rows)'u yazdırır. Boş bir dize olan başlık veya altbilgi yazdırılmaz.header()vefooter()kancaları varsayılan olarak""döndürür veformat_row()soyuttur.CsvExporter: başlıkname,score, bir satır iseAda,12'dir. Altbilgi yoktur.ListExporter: başlık yoktur, bir satır* Ada scored 12'dir ve altbilgi, satır sayısını içerenPlayers: N'dir.
Sağlanan kod biçimi (csv veya list), ardından gelecek satır sayısını ve sonra her satırda bir NAME SCORE satırını okur. Ada 12 ve Bo 7 ile list için çıktı şöyledir:
* Ada scored 12
* Bo scored 7
Players: 2Kodunu exporter.gd, csv_exporter.gd ve list_exporter.gd dosyalarına yaz. main.gd, sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var style := OS.read_string_from_stdin()
var rows: Array = []
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
rows.append({"name": parts[0], "score": int(parts[1])})
var exporter: Exporter = CsvExporter.new()
if style == "list":
exporter = ListExporter.new()
exporter.export_rows(rows)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi