//Abstract factoryabstract class ComputerFactory{ public abstract Computer BuildComputer(Computer.ComputerType compType);}//Concrete factoryclass Dell : ComputerFactory{ public override Computer BuildComputer(Computer.ComputerType compType) { if (compType == Computer.ComputerType.xps) return (new xps()); else if (compType == Computer.ComputerType.inspiron) return new inspiron(); else return null; }}//Concrete factoryclass Hp : ComputerFactory{ public override Computer BuildComputer(Computer.ComputerType compType) { if (compType == Computer.ComputerType.envoy) return (new envoy()); else if (compType == Computer.ComputerType.presario) return new presario(); else return null; }}//Abstract productpublic abstract class Computer{ public abstract string Mhz { get; set; } public enum ComputerType { xps,inspiron,envoy,presario }}//Concrete product for DELLpublic class xps : Computer{ string _mhz = string.Empty; public override string Mhz { get { return _mhz; } set { _mhz = value; } }}//Concrete product for DELLpublic class inspiron : Computer{ string _mhz = string.Empty; public override string Mhz { get { return _mhz; } set { _mhz = value; } }}//Concrete product for HPpublic class envoy : Computer{ string _mhz = string.Empty; public override string Mhz { get { return _mhz; } set { _mhz = value; } }}//Concrete product for HPpublic class presario : Computer{ string _mhz = string.Empty; public override string Mhz { get { return _mhz; } set { _mhz = value; } }}public class BestBuy{ ComputerFactory compFactory; Computer comp; public BestBuy(Computer.ComputerType compType) { if (compType == Computer.ComputerType.xps || compType == Computer.ComputerType.inspiron) compFactory = new Dell(); else compFactory = new Hp(); comp = compFactory.BuildComputer(compType); } public Computer Sell() { return comp; }}