设计模式笔记 - 工厂方法模式

126 阅读1分钟

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。


工厂方法模式的优势:

  • 封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。

  • 代码复用:创建代码抽离到独立的工厂类之后可以复用。

  • 隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。

  • 控制复杂度:将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。


下面是实例代码:

package main

import (
	"fmt"
)

type dialog interface {
	render()
	onClick()
}

type dialogFactory interface {
    newDialog() dialog
}

type windowDialog struct{}

func (w *windowDialog) render() {
	fmt.Println("render windowDialog")
}

func (w *windowDialog) onClick() {
	fmt.Println("on click windowDialog")
}

type windowDialogFactory struct{}

func newWindowDialogFactory() dialogFactory {
    return &windowDialogFactory{}
}

func (f *windowDialogFactory) newDialog() dialog {
    return &windowDialog{}
}

func newDialogFactory(factoryName string) dialogFactory {
    switch factoryName {
    case "windowDialog":
        return newWindowDialogFactory()
    default:
        return nil
    }
}

func main() {
    f := newDialogFactory("windowDialog")
    w := f.newDialog()
    w.render()
    w.onClick()
}

从上面的代码可以看出,工厂方法模式的主要特点是: 通过工厂来创建子工厂,子工厂创建实例对象。


参考