public interface IAbstractChair {
string FunctionOfChair();
public interface IAbstractTable {
string FunctionOfTable();
class ModerChair: IAbstractChair {
public string FunctionOfChair() {
return "Function of Modern Chair";
class VictorianChair: IAbstractChair {
public string FunctionOfChair() {
return "Function of Victorian Chair";
class ModerTable: IAbstractTable {
public string FunctionOfTable() {
return "Function of Modern Table";
class VictorianTable: IAbstractTable {
public string FunctionOfTable() {
return "Function of Victorian Table";
public interface IFurnitureFactory {
IAbstractChair CreateChair();
IAbstractTable CreateTable();
class ModernFactory: IFurnitureFactory {
public IAbstractChair CreateChair() {
public IAbstractTable CreateTable() {
class VictorianFactory: IFurnitureFactory {
public IAbstractChair CreateChair() {
return new VictorianChair();
public IAbstractTable CreateTable() {
return new VictorianTable();
public void ClientExecution() {
Console.WriteLine("Client: Testing client code with the first factory type...");
ClientMethod(new ModernFactory());
Console.WriteLine("Client: Testing the same client code with the second factory type...");
ClientMethod(new VictorianFactory());
public void ClientMethod(IFurnitureFactory factory) {
var chair = factory.CreateChair();
var table = factory.CreateTable();
Console.WriteLine(chair.FunctionOfChair());
Console.WriteLine(table.FunctionOfTable());
public static void Main() {
new Client().ClientExecution();