package main
import "fmt"
type Builder interface {
BuilderCpu()
BuilderDisk()
BuilderMemory()
}
type HighComputer struct {}
func (h *HighComputer) BuilderCpu(){
fmt.Println("建造一个高级的cpu........")
}
func (h *HighComputer) BuilderDisk(){
fmt.Println("建造一个高级的硬盘........")
}
func (h *HighComputer) BuilderMemory(){
fmt.Println("建造一个高级的内存........")
}
type LowComputer struct {}
func (h *LowComputer) BuilderCpu(){
fmt.Println("建造一个低级的cpu........")
}
func (h *LowComputer) BuilderDisk(){
fmt.Println("建造一个低级的硬盘........")
}
func (h *LowComputer) BuilderMemory(){
fmt.Println("建造一个低级的内存........")
}
type MixtureComputer struct {}
func (h *MixtureComputer) BuilderCpu(){
fmt.Println("建造一个低级的cpu........")
}
func (h *MixtureComputer) BuilderDisk(){
fmt.Println("建造一高级的硬盘........")
}
func (h *MixtureComputer) BuilderMemory(){
fmt.Println("建造一个高级的内存........")
}
type Drictor struct {
builder Builder
}
func NewConstruct(b Builder) *Drictor {
return &Drictor{builder: b}
}
func (d *Drictor) Construct(){
d.builder.BuilderCpu()
d.builder.BuilderDisk()
d.builder.BuilderMemory()
}
func main() {
hc := HighComputer{}
d := NewConstruct(&hc)
d.Construct()
mc := MixtureComputer{}
d1 := NewConstruct(&mc)
d1.Construct()
lc := LowComputer{}
d2 := NewConstruct(&lc)
d2.Construct()
}
package main
import "fmt"
type Builder interface {
Build()
}
type Director struct {
builder Builder
}
func NewBuilder(b Builder) Director {
return Director{builder:b}
}
func (d *Director) Construct(){
d.builder.Build()
}
func NewDirector(builder Builder) Director {
return Director{builder:builder}
}
type ConcreteBuilder struct {
built bool
}
func NewConcreteBuilder() ConcreteBuilder {
return ConcreteBuilder{built:false}
}
func (b *ConcreteBuilder) Build() {
fmt.Println("我被调用了。。。。")
b.built = true
}
type Product struct {
Built bool
}
func (b *ConcreteBuilder) GetResult() Product {
return Product{b.built}
}
func main() {
cb := NewConcreteBuilder()
d := NewDirector(&cb)
d.Construct()
p := cb.GetResult()
fmt.Println(p.Built)
}