よう皆!あなたとアレックスと私はでデザインパターンの使用上の記事の私達のシリーズを続けGolangの言語。
この知識の領域がGolang言語の世界にどのように適用できるかを理解するために、あなたからフィードバックを受け取ることは興味深いことです。すでにテンプレートを見てきました:Simple Factory、Singleton、Strategy。今日は、別のデザインパターンであるプロトタイプについて検討したいと思います。
それは何のために必要ですか?
これは、実装の詳細に立ち入ることなくオブジェクトをコピーできるジェネレーティブデザインパターンです。
それはどのような問題を解決しますか?
コピーする必要のあるオブジェクトがあると想像してください。どうやるか?同じクラスの空のオブジェクトを作成してから、すべてのフィールドの値を古いオブジェクトから新しいオブジェクトに1つずつコピーします。結構ですが、ニュアンスがあります!状態の一部がプライベートになる可能性があるため、すべてのオブジェクトをこの方法でコピーできるわけではありません。つまり、残りのプログラムコードにはアクセスできません。
別の問題もあります。コピーコードは、コピーされたオブジェクトのクラスに依存するようになります。結局のところ、オブジェクトのすべてのフィールドを反復処理するには、そのクラスにバインドする必要があります。このため、特定のクラスではなく、インターフェイスのみを知っているオブジェクトをコピーすることはできません。
解決策は何ですか?
プロトタイプテンプレートは、コピーするオブジェクト自体にコピーを作成するように指示します。クローン作成をサポートするすべてのオブジェクトに共通のインターフェースを導入します。これにより、特定のクラスにバインドされることなくオブジェクトをコピーできます。通常、このようなインターフェイスにはクローンメソッドが1つしかありません。
. . , . , , , . , . .
- . , , . -, , . . , , .
, . - clone. . . , , . , . .
?
- . , . .. , - . , . , - , , ..
- , . , , , ..
, , prototype
, clone
. struct
, show
clone
prototype
.
, . directory
, prototype
. . show
, clone
. clone
, - , . , _clone
.
. . , . :
Open directory 2 Directory 2 Directory 1 category 1 category 2 category 3 Clone and open directory 2 Directory 2_clone Directory 1_clone category 1_clone category 2_clone category 3_clone
?
. , . , -, . .
. , - , , . . , .
, Prototype :
.
, .
, abstract factory, .
, , . 63% , Golang - . , , , Golang - . , . , , .