type Builder interface {
BuildCpu()
BuildDisk()
BuildRom()
}
type SuperComputer struct{
Name string
}
func (t *SuperComputer)BuildCpu(){
fmt.Println("超级cpu",t.Name)
}
func (t *SuperComputer)BuildDisk(){
fmt.Println("超级硬盘",t.Name)
}
func (t *SuperComputer)BuildRom(){
fmt.Println("超级内存",t.Name)
}
type PlainComputer struct{
Name string
}
func (t *PlainComputer)BuildCpu(){
fmt.Println("普通cpu",t.Name)
}
func (t *PlainComputer)BuildDisk(){
fmt.Println("普通硬盘",t.Name)
}
func (t *PlainComputer)BuildRom(){
fmt.Println("普通内存",t.Name)
}
type Drictor struct {
builder Builder
}
func NewDrictor(b Builder) *Drictor{
return &Drictor{
builder:b,
}
}
func(t *Drictor)Construct(){
t.builder.BuildCpu()
t.builder.BuildDisk()
t.builder.BuildRom()
}
func main() {
super :=&SuperComputer{
Name:"超级无敌电脑",
}
NewDrictor(super).Construct()
plain := &PlainComputer{
Name:"现在的联想普通电脑",
}
NewDrictor(plain).Construct()
}