Repository navigation
Expand file tree
/
Copy pathExpAbstractFactory.java
More file actions
83 lines (66 loc) · 3.61 KB
/
Copy pathExpAbstractFactory.java
File metadata and controls
83 lines (66 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
public class ExpAbstractFactory {
public static void main(String[] args) {
// La aplicación solo conoce UIFactory — no sabe qué tema se está usando
runApp(new DarkThemeFactory());
System.out.println();
runApp(new LightThemeFactory());
}
static void runApp(UIFactory factory) {
System.out.println("=== " + factory.themeName() + " ===");
Button btn = factory.createButton();
Dialog dialog = factory.createDialog();
btn.render();
btn.onClick();
dialog.show("¿Confirmar acción?");
dialog.close();
}
// ── Fábrica abstracta ───────────────────────────────────────────────────
abstract static class UIFactory {
abstract Button createButton();
abstract Dialog createDialog();
abstract String themeName();
}
// ── Productos abstractos ────────────────────────────────────────────────
abstract static class Button {
abstract void render();
abstract void onClick();
}
abstract static class Dialog {
abstract void show(String message);
void close() { System.out.println(" [dialog] cerrado"); } // comportamiento base compartido
}
// ── Dark theme ──────────────────────────────────────────────────────────
static class DarkThemeFactory extends UIFactory {
@Override public Button createButton() { return new DarkButton(); }
@Override public Dialog createDialog() { return new DarkDialog(); }
@Override public String themeName() { return "Dark Theme"; }
}
static class DarkButton extends Button {
@Override public void render() { System.out.println(" [button] ████ BOTÓN OSCURO ████"); }
@Override public void onClick() { System.out.println(" [button] click oscuro (ripple #1a1a1a)"); }
}
static class DarkDialog extends Dialog {
@Override public void show(String msg) {
System.out.println(" [dialog] ┌─────────────────────────┐");
System.out.println(" [dialog] │ " + msg);
System.out.println(" [dialog] └─────────────────────────┘");
}
}
// ── Light theme ─────────────────────────────────────────────────────────
static class LightThemeFactory extends UIFactory {
@Override public Button createButton() { return new LightButton(); }
@Override public Dialog createDialog() { return new LightDialog(); }
@Override public String themeName() { return "Light Theme"; }
}
static class LightButton extends Button {
@Override public void render() { System.out.println(" [button] [ BOTÓN CLARO ]"); }
@Override public void onClick() { System.out.println(" [button] click claro (ripple #f5f5f5)"); }
}
static class LightDialog extends Dialog {
@Override public void show(String msg) {
System.out.println(" [dialog] +-------------------------+");
System.out.println(" [dialog] | " + msg);
System.out.println(" [dialog] +-------------------------+");
}
}
}