パターンコンポジット

複合パターンは構造設計パターンを指し、国内情報源では「コンポジター」として知られています。
アプリケーションを開発しているとします。写真アルバム。ユーザーはフォルダーを作成し、そこに写真を追加したり、その他の操作を実行したりできます。フォルダー内のファイルの数、すべてのファイルとフォルダーの合計数を表示する機能は必ず必要です。
ツリーを使用する必要があることは明らかですが、シンプルで便利なインターフェイスを備えたツリー アーキテクチャを実装するにはどうすればよいでしょうか?複合パターンが役に立ちます。

ムーンダックスを着たシーラ

次に、ディレクトリに dataCount() メソッドを実装します –コンポーネントの配列にあるすべての要素を調べて、それらの dataCount をすべて合計します。
準備は完了です!
以下は Go の例です。
package main

import "fmt"

type component interface {

dataCount() int

}

type file struct {

}

type directory struct {

c []component

}

func (f file) dataCount() int {

return 1

}

func (d directory) dataCount() int {

var outputDataCount int = 0

for _, v := range d.c {
outputDataCount += v.dataCount()
}

return outputDataCount

}

func (d *directory) addComponent(c component) {

d.c = append(d.c, c)

}

func main() {

var f file
var rd directory
rd.addComponent(f)
rd.addComponent(f)
rd.addComponent(f)
rd.addComponent(f)

fmt.Println(rd.dataCount())

var sd directory
sd.addComponent(f)

rd.addComponent(sd)
rd.addComponent(sd)
rd.addComponent(sd)

fmt.Println(sd.dataCount())
fmt.Println(rd.dataCount())

}

ソース

https://refactoring.guru/ru/design-patterns/複合

Leave a Comment

Your email address will not be published. Required fields are marked *