這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在項目過程中,遇到某處需要使用原廠模式,因此寫了個測試代碼進行測試,
- 首先定義了interface Worker,其中包含一個介面Work(task *string)
- 然後定義建立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)}