Topic: Abstract Factory Design Pattern Implementation
Share/Save/Bookmark

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