1. 程式人生 > >golang實現抽象工廠模式

golang實現抽象工廠模式

在專案過程中,遇到某處需要使用工廠模式,因此寫了個測試程式碼進行測試,

  1. 首先定義了interface Worker,其中包含一個介面Work(task *string)
  2. 然後定義建立Worker的interface WorkerCreator,包含一個介面Create() ,返回值為Worker
type Worker interface {
    Work(task *string)
}

type WorkerCreator interface {
    Create() Worker
}

我們假設有一個工種程式設計師,實現了Work介面,同時定義其構造類,實現Create()介面

type Programmer struct {
}

func (p *Programmer) Work(task *string) {
    fmt.Println("Programmer process", *task)
}

type ProgrammerCreator struct {
}

func (c *ProgrammerCreator) Create() Worker {
    s := new(Programmer)
    return s
}

再設想一種工種農場主:

type Farmer struct {
}

func (f *Farmer) Work(task *string
) { fmt.Println("Farmer process", *task) } type FarmerCreator struct { } func (c *FarmerCreator) Create() Worker { s := new(Farmer) return s }

編寫測試程式碼

func main() {
    var c WorkerCreator
    c = new(ProgrammerCreator)
    p := c.Create()
    taskProject := "Project"
    p.Work(&taskProject)

    c = new(FarmerCreator)
    f := c.Create
() taskFarmland := "farmland" f.Work(&taskFarmland) }