この記事は Google Cloud Translation APIを使用した自動翻訳です。
いくつかの文書は原文を読むのに良いかもしれません。
066:Kotlinのプロトタイプパターン:既存のオブジェクトから新しいオブジェクトを作成する
プロトタイプパターンは、作成するオブジェクトの種類が新しいオブジェクトを作成するために複製されるプロトタイプインスタンスによって決定されるときにソフトウェア開発で使用される生成デザインパターンです。このパターンは次に使用されます。
プロトタイプパターンはファクトリメソッドと抽象ファクトリパターンの代替であり、しばしば一緒に使用されます。
プロトタイプパターンの主な利点は、生成するオブジェクトの正確なタイプを指定することなく、新しいオブジェクトを作成できることです。これは、作成するオブジェクトの種類が事前にわからない場合や、最初から新しいオブジェクトを作成するコストが膨大な場合に役立ちます。
プロトタイプパターンの主な欠点は、プロトタイプに対するすべての変更がすべてのクローンに伝播されるため、プロトタイプを維持および更新するのが難しいことです。
プロトタイプパターンを使用する場合
プロトタイプパターンは、次の場合に使用する必要があります。
プロトタイプパターンの実装方法
プロトタイプパターンは、次の手順を使用してKotlinで実装できます。
プロトタイプを表すクラスを作成します。このクラスには、プロトタイプのコピーを返す clone() メソッドが必要です。
プロトタイプクラスを拡張する具体的なクラスを作成します。
プロトタイプをインスタンス化し、複製する main() メソッドを作成します。
4.プロトタイプで新しいオブジェクトを作成し、レプリカであることを確認してプロトタイプパターンをテストします。
以下はKotlinのプロトタイプパターンの例です。
// The Prototype クラス
abstract class Prototype {
abstract fun clone(): Prototype
}
// The Concrete Prototype classes
class ConcretePrototypeA: Prototype {
override fun clone(): Prototype {
return ConcretePrototypeA()
}
}
class ConcretePrototypeB: Prototype {
override fun clone(): Prototype {
return ConcretePrototypeB()
}
}
// The main() メソッド
fun main(args: Array<String>) {
val prototypeA = ConcretePrototypeA()
val prototypeB = ConcretePrototypeB()
// Clone the prototypes
val cloneA = prototypeA.clone()
val cloneB = prototypeB.clone()
// Verify that the prototypes have been cloned
println("cloneA is a clone of prototypeA: ${cloneA === prototypeA}")
println("cloneB is a clone of prototypeB: ${cloneB === prototypeB}")
}
この例では、Prototypeクラスは抽象クラスであり、特定のクラスによって実装されるclone()メソッドを定義します。 Concrete Prototypeクラスは、オブジェクトのコピーを返すためにclone()メソッドをオーバーライドするPrototypeクラスの特定のサブクラスです。
main() メソッドは、ConcretePrototypeA と ConcretePrototypeB の 2 つのプロトタイプをインスタンス化して複製します。次に、レプリカがソースのコピーであることを確認します。
プログラムの出力は次のとおりです。
cloneA is a clone of prototypeA: false
cloneB is a clone of prototypeB: false
出力が示すように、レプリカはプロトタイプと同じオブジェクトではなく、プロトタイプのコピーです。
プロトタイプパターンを使用する場合
プロトタイプパターンは、次の場合に使用する必要があります。
プロトタイプパターンの主な利点は、生成するオブジェクトの正確なタイプを指定することなく、新しいオブジェクトを作成できることです。これは、作成するオブジェクトの種類が事前にわからない場合や、最初から新しいオブジェクトを作成するコストが膨大な場合に役立ちます。
プロトタイプパターンの主な欠点は、プロトタイプに対するすべての変更がすべてのクローンに伝播されるため、プロトタイプを維持および更新するのが難しいことです。
外部リンク
Wikipediaのプロトタイプパターン(https://en.wikipedia.org/wiki/Prototype_pattern)
Javaのプロトタイプデザインパターン(https://www.geeksforgeeks.org/prototype-design-pattern/)
Pythonのプロトタイプデザインパターン(https://fkhadra.github.io/2017/02/01/python-prototype/)