implemented template pattern

This commit is contained in:
ismayilmalik 2018-01-16 23:37:28 +03:00
parent a518796f6c
commit a4bcf12db6

View File

@ -0,0 +1,41 @@
package template_p
import (
"fmt"
)
type Greeter interface {
message() string
}
type GreeterTemplate interface {
first() string
third() string
greet(Greeter) string
}
type PrincesGreeterTmpl struct {}
func (p PrincesGreeterTmpl) first() string {
return "Welcome"
}
func (p PrincesGreeterTmpl) third() string {
return "to our palace!"
}
func (p PrincesGreeterTmpl) greet(g Greeter) string {
return fmt.Sprintf("%s, %s %s", p.first(), g.message(), p.third())
}
type PrincesGreeter struct {
name string
}
func (p *PrincesGreeter) message() string {
return fmt.Sprintf("your magesty princes %s", p.name)
}
func Demo() {
prGreeter := &PrincesGreeter{"Diana"}
tmpl := PrincesGreeterTmpl{}
fmt.Println(tmpl.greet(prGreeter))
}