C# - VB.Net Method Implementation using System; public interface IAVDevice { IAudio GetAudio(); IVideo GetVideo(); } public interface IVideo { string GetPictureQuality(); } public interface IAudio { string GetSoundQuality(); } class CCd:IAVDevice { public IAudio GetAudio() { return new CCdAudio(); } public IVideo GetVideo() { return new CCdVideo(); } } class CDvd:IAVDevice { public IAudio GetAudio() { return new CDvdAudio(); } public IVideo GetVideo() { return new CDvdVideo(); } } class CCdAudio:IAudio { public string GetSoundQuality() { return "CD Audio is better then DVD Audio"; } } class CCdVideo:IVideo { public string GetPictureQuality() { return "CD video quality is not as good as DVD"; } } class CDvdAudio:IAudio { public string GetSoundQuality() { return "DVD Audio is not as good as CD Audio"; } } class CDvdVideo:IVideo { public string GetPictureQuality() { return "DVD video quality is better then CD"; } } class CAVMaker { public IAVDevice AVMake(string xWhat) { switch (xWhat.ToLower()) { case "cd"": return new CCd(); case "dvd"": return new CDvd(); default: return new CCd(); } } } public class AbstractFactory { static void Main(string[] args) { CAVMaker objFactMaker = new CAVMaker(); IAVDevice objFact; IAudio objAudio; IVideo objVideo; string strWhat; strWhat = args[0]; objFact = objFactMaker.AVMake(strWhat); objAudio = objFact.GetAudio(); objVideo = objFact.GetVideo(); Console.WriteLine(objAudio.GetSoundQuality()); Console.WriteLine(objVideo.GetPictureQuality()); } } VB.NET Implementation To run the example from console first make the exe and then run it by using vbc /out:AbstractFactory.exe AbstractFactory.vb ‘Creates AbstractFactory AbstractFactory cd ‘CD Family AbstractFactory dvd ‘DVD Family Imports System Public Interface IAVDevice Function GetAudio() As IAudio Function GetVideo() As IVideo End Interface Public Interface IAudio Function GetSoundQuality() As String End Interface Public Interface IVideo Function GetPictureQuality() As String End Interface Class CCd Implements IAVDevice Public Function GetAudio() As IAudio Implements IAVDevice.GetAudio GetAudio = New CCdAudio() End Function Public Function GetVideo() As IVideo Implements IAVDevice.getVideo GetVideo = New CCdVideo() End Function End Class Class CDvd Implements IAVDevice Public Function GetAudio() As IAudio Implements IAVDevice.GetAudio GetAudio = New CDvdAudio() End Function Public Function GetVideo() As IVideo Implements IAVDevice.GetVideo GetVideo = New CDvdVideo() End Function End Class Class CCdAudio Implements IAudio Public Function GetSoundQuality() As String Implements _ IAudio.GetSoundQuality GetSoundQuality = "CD Audio is better then DVD Audio" End Function End Class Class CCdVideo Implements IVideo Public Function GetPictureQuality() As String Implements _ IVideo.GetPictureQuality GetPictureQuality = "CD video quality is not as good as DVD" End Function End Class Class CDvdAudio Implements IAudio Public Function GetSoundQuality() As String Implements _ IAudio.GetSoundQuality GetSoundQuality = "DVD Audio is not as good as CD Audio" End Function End Class Class CDvdVideo Implements IVideo Public Function GetPictureQuality() As String Implements _ IVideo.GetPictureQuality GetPictureQuality = "DVD video quality is better then CD" End Function End Class Public Class CAVMaker Public Function AVMake(ByVal xWhat As String) As IAVDevice Select Case xWhat.ToLower Case "cd" AVMake = New CCd() Case "dvd" AVMake = New CDvd() End Select End Function End Class Public Class Client Public Shared Sub Main(ByVal CmdArgs() As String) Dim objFactMaker As New CAVMaker() Dim objFact As IAVDevice Dim objAudio As IAudio Dim objVideo As IVideo Dim strWhat as String strWhat = CmdArgs(0) objFact = objFactMaker.AVMake(strWhat) objAudio = objFact.GetAudio objVideo = objFact.getVideo Console.WriteLine(objAudio.GetSoundQuality) Console.WriteLine(objVideo.GetPictureQuality) End Sub End Class