简单工厂模式是一种创建型设计模式,父类提供一个统一的创建子类接口。
适用场景:
- 编写代码时,无法预知对象具体类别和依赖关系时
- 希望用户能扩展你的组件,而尽量避免侵入性时
优势:
-
单一职责原则。避免代码强耦合
-
开闭原则。无需修改原本的代码,就能引入新功能
劣势:
- 随着子类的增多,父类创建部分代码会变得冗余。
下面是实例代码:
package main
import (
"fmt"
)
type dialog interface {
render()
onClick()
}
type windowDialog struct{}
func newWindowDialog() *windowDialog {
return &windowDialog{}
}
func (w *windowDialog) render() {
fmt.Println("render windowDialog")
}
func (w *windowDialog) onClick() {
fmt.Println("on click windowDialog")
}
type webDialog struct{}
func newWebDialog() *webDialog {
return &webDialog{}
}
func (w *webDialog) render() {
fmt.Println("render webDialog")
}
func (w *webDialog) onClick() {
fmt.Println("on click webDialog")
}
func newDialog(dialogName string) dialog {
switch dialogName {
case "windowDialog":
return newWindowDialog()
case "webDialog":
return newWebDialog()
default:
return nil
}
}
func main() {
w := newDialog("windowDialog")
w.render()
w.onClick()
fmt.Println()
w = newDialog("webDialog")
w.render()
w.onClick()
}
// 输出:
// render windowDialog
// on click windowDialog
// render webDialog
// on click webDialog