Я собираюсь использовать Шаблон цепочки ответственности для простого диалога CLI:
type Handler interface {
Request(flag bool)
}
type AskName struct {
next Handler
}
func (h *AskName) Request(flag bool) {
fmt.Println("AskName.Request()")
if flag {
h.next.Request(flag)
}
}
type AskAge struct {
next Handler
}
func (h *AskAge) Request(flag bool) {
fmt.Println("AskAge.Request()")
if flag {
h.next.Request(flag)
}
}
type AskEmail struct {
next Handler
}
func (h *AskEmail) Request(flag bool) {
fmt.Println("AskEmail.Request()")
}
func main() {
handlerA := &AskName{&AskAge{new(AskEmail)}}
handlerA.Request(true)
}
Вопрос: представьте себе ситуацию, когда пользователь ввел неверный адрес электронной почты. Как я могу повторно вызвать обработчик AskEmail
(или вообще вызвать другой обработчик)?
Например, если я разделю логику следующим образом:
type AskEmail struct {
next Handler
}
func (h *AskEmail) Request(flag bool) {
fmt.Println("AskEmail.Request()")
if flag {
h.next.Request(flag)
}
}
type ValidateEmail struct {
next Handler
}
func (h *ValidateEmail) Request(flag bool) {
fmt.Println("ValidateEmail.Request()")
}
как мне позвонить AskEmail
с ValidateEmail
, если ValidateEmail
не получится?