Example: creating UI widgets for Windows vs Linux, or drivers for different chipsets.
- Ensures compatible object families
- Enables platform independence
C Example (Factory function)
Using pointer to function
#include <stdio.h>
typedef struct {
void (*drawButton)();
} GUIFactory;
void winButton() { printf("Windows Button\n"); }
void linuxButton() { printf("Linux Button\n"); }
GUIFactory createWindowsFactory() {
GUIFactory f = { winButton };
return f;
}
GUIFactory createLinuxFactory() {
GUIFactory f = { linuxButton };
return f;
}
int main() {
GUIFactory gui = createLinuxFactory();
gui.drawButton();
}
C++ Example
Using function override
#include <iostream>
using namespace std;
class Button {
public:
virtual void draw() = 0;
};
class WinButton : public Button {
public:
void draw() override { cout << "Windows Button\n"; }
};
class LinuxButton : public Button {
public:
void draw() override { cout << "Linux Button\n"; }
};
class GUIFactory {
public:
virtual Button* createButton() = 0;
};
class WinFactory : public GUIFactory {
public:
Button* createButton() override { return new WinButton(); }
};
class LinuxFactory : public GUIFactory {
public:
Button* createButton() override { return new LinuxButton(); }
};
int main() {
GUIFactory* factory = new LinuxFactory();
Button* btn = factory->createButton();
btn->draw();
}