Abstract Factory is a kind of Structural Design Pattern.
Solves the problem of creating instances of entire product families without specifying their concrete class.
Frequency of use: 5/5 (High)
Intent:
Provides an interface for creating families of related or dependent objects without specifying their concrete classes.
The new operator is considered harmful
Problem:
Solution:
UML Class Diagram:
Code:
Solves the problem of creating instances of entire product families without specifying their concrete class.
Frequency of use: 5/5 (High)
Intent:
Provides an interface for creating families of related or dependent objects without specifying their concrete classes.
The new operator is considered harmful
Problem:
Solution:
- Explicitly declare interfaces for each distinct product of the product family
- Make all variants of that product follow those interfaces
- Create an abstract factory which returns abstract product type represented by the interface
UML Class Diagram:
Code:
using System;
namespace AbstractFactory
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("This is Abstract Factory");
Console.ReadLine();
}
}
#region FamilyOfProducts
abstract class Button
{
public abstract void Paint();
}
class WindowsButton : Button
{
public override void Paint()
{
Console.WriteLine("Paint() called of Windows Button");
}
}
class MacButton : Button
{
public override void Paint()
{
Console.WriteLine("Paint() called of Mac Button");
}
}
abstract class CheckBox
{
public abstract void Paint();
}
class WinCheckBox : CheckBox
{
public override void Paint()
{
Console.WriteLine("Paint() called of Windows CheckBox");
}
}
class MacCheckBox : CheckBox
{
public override void Paint()
{
Console.WriteLine("Paint() called of Mac CheckBox");
}
}
#endregion FamilyOfProducts
#region AbstractFactory & ConcreteFactory
abstract class GUIFactory
{
public abstract Button CreateButton();
public abstract CheckBox CreateCheckBox();
}
class WinFactory : GUIFactory
{
public override Button CreateButton()
{
return new WindowsButton();
}
public override CheckBox CreateCheckBox()
{
return new WinCheckBox();
}
}
class MacFactory : GUIFactory
{
public override Button CreateButton()
{
return new MacButton();
}
public override CheckBox CreateCheckBox()
{
return new MacCheckBox();
}
}
#endregion AbstractFactory
class Application
{
private GUIFactory _factory;
}
}
Comments
Post a Comment