Suporta a adição de novos tipos de produtos e sua familiesExample: interface pública IComputerFactory {ICPU createCPU (); IMemory createMemory ();} {interface pública ICPU GetCPUString string ();} {interface pública IMemory GetMemoryString string ();} //Betão CPUA classe CPUApublic: ICPU {GetCPUString cadeia pública () {return "CPUA"; }} //Classe MemoryApublic Betão MemoryA: IMemory {GetMemoryString cadeia pública () {return "MemoryA"; }} classe pública ComputerFactoryA: IComputerFactory {createCPU ICPU pública () {return new CPUA (); } Public IMemory createMemory () {return new MemoryA (); }} Cliente classe pública {//este é um método de modelo; não depende da Fábrica de Concreto //ea corda estática classes concretas público BuildComputer (fábrica IComputerFactory) {cpu ICPU = factory.
createCPU (); Memória IMemory = factory.createMemory (); StringBuilder sb = new StringBuilder (); sb.Append (string.Format ("CPU: {0}", cpu.GetCPUString ())); sb.Append (Environment.NewLine); sb.Append (string.Format ("Memory: {0}", memory.GetMemoryString ())); retornar sb.ToString ();}} Chamando Clientprivate anular button2_Click (object sender, EventArgs e) {fábrica Abstract_Factory.IComputerFactory = new Abstract_Factory.ComputerFactoryA();MessageBox.Show(Abstract_Factory.Client.BuildComputer(factory));}