设计模式笔记 - 简单工厂模式

80 阅读1分钟

简单工厂模式是一种创建型设计模式,父类提供一个统一的创建子类接口。


适用场景:

  • 编写代码时,无法预知对象具体类别和依赖关系时
  • 希望用户能扩展你的组件,而尽量避免侵入性时

优势:

  • 单一职责原则。避免代码强耦合

  • 开闭原则。无需修改原本的代码,就能引入新功能


劣势:

  • 随着子类的增多,父类创建部分代码会变得冗余。

下面是实例代码:

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