awesome-patterns/structural/composite/main.go
2019-05-05 16:08:55 +08:00

69 lines
1.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 组合模式 composite pattern.
// 用于表示树形的结构这里以一个web静态目录为例
package main
type File struct {
IsDir bool
Name string
ChildFile []*File
}
func (f *File)AddChild(file ...*File){
f.ChildFile = append(f.ChildFile ,file...)
}
func checkFile(file *File) {
println("into dir ->" ,file.Name)
for _ ,v := range file.ChildFile{
if v.IsDir{
checkFile(v)
}else{
println("dir ->" ,file.Name ,".fileName ->" ,v.Name)
}
}
}
func main(){
/*
static|
-js|
-jquery.js
-main|
-index.js
-login.js
-css|
-bootstrap.css
*/
static := &File{true ,"static" ,make([]*File ,0)}
js := &File{true ,"js" ,make([]*File ,0)}
css := &File{true ,"css" ,make([]*File ,0)}
static.AddChild(js ,css)
jquery := &File{false ,"jquery.js" ,nil}
mjs := &File{true ,"main" ,make([]*File ,0)}
js.AddChild(jquery ,mjs)
injs := &File{false ,"index.js" ,nil}
lojs := &File{false ,"login.js" ,nil}
mjs.AddChild(injs ,lojs)
btstrap := &File{false ,"bootstrap.css" ,nil}
css.AddChild(btstrap)
checkFile(static)
/*
output:
into dir -> static
into dir -> js
dir -> js .fileName -> jquery.js
into dir -> main
dir -> main .fileName -> index.js
dir -> main .fileName -> login.js
into dir -> css
dir -> css .fileName -> bootstrap.css
*/
}