Add creational patterns, Interpreter; remove scripts; update README
This commit is contained in:
21
01-creational/abstract-factory/Application.java
Normal file
21
01-creational/abstract-factory/Application.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package abstractfactory;
|
||||
|
||||
/** Client - uses the factory without knowing concrete classes */
|
||||
public class Application {
|
||||
private final Button button;
|
||||
private final Checkbox checkbox;
|
||||
|
||||
public Application(GUIFactory factory) {
|
||||
button = factory.createButton();
|
||||
checkbox = factory.createCheckbox();
|
||||
}
|
||||
|
||||
public void render() {
|
||||
button.render();
|
||||
checkbox.render();
|
||||
}
|
||||
|
||||
public void simulateClick() {
|
||||
button.onClick();
|
||||
}
|
||||
}
|
||||
6
01-creational/abstract-factory/Button.java
Normal file
6
01-creational/abstract-factory/Button.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package abstractfactory;
|
||||
|
||||
public interface Button {
|
||||
void render();
|
||||
void onClick();
|
||||
}
|
||||
5
01-creational/abstract-factory/Checkbox.java
Normal file
5
01-creational/abstract-factory/Checkbox.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package abstractfactory;
|
||||
|
||||
public interface Checkbox {
|
||||
void render();
|
||||
}
|
||||
7
01-creational/abstract-factory/GUIFactory.java
Normal file
7
01-creational/abstract-factory/GUIFactory.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package abstractfactory;
|
||||
|
||||
/** Abstract Factory - creates families of related UI components */
|
||||
public interface GUIFactory {
|
||||
Button createButton();
|
||||
Checkbox createCheckbox();
|
||||
}
|
||||
6
01-creational/abstract-factory/MacButton.java
Normal file
6
01-creational/abstract-factory/MacButton.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package abstractfactory;
|
||||
|
||||
public class MacButton implements Button {
|
||||
@Override public void render() { System.out.println("[Mac] Rendering button with rounded corners"); }
|
||||
@Override public void onClick() { System.out.println("[Mac] Button clicked - glow animation"); }
|
||||
}
|
||||
5
01-creational/abstract-factory/MacCheckbox.java
Normal file
5
01-creational/abstract-factory/MacCheckbox.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package abstractfactory;
|
||||
|
||||
public class MacCheckbox implements Checkbox {
|
||||
@Override public void render() { System.out.println("[Mac] Rendering checkbox with rounded tick box"); }
|
||||
}
|
||||
6
01-creational/abstract-factory/MacFactory.java
Normal file
6
01-creational/abstract-factory/MacFactory.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package abstractfactory;
|
||||
|
||||
public class MacFactory implements GUIFactory {
|
||||
@Override public Button createButton() { return new MacButton(); }
|
||||
@Override public Checkbox createCheckbox() { return new MacCheckbox(); }
|
||||
}
|
||||
22
01-creational/abstract-factory/Main.java
Normal file
22
01-creational/abstract-factory/Main.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package abstractfactory;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("=== Abstract Factory Pattern Demo ===\n");
|
||||
|
||||
String os = System.getProperty("os.name", "Windows").toLowerCase();
|
||||
GUIFactory factory = os.contains("mac") ? new MacFactory() : new WindowsFactory();
|
||||
|
||||
System.out.println("Detected OS family: " + (os.contains("mac") ? "Mac" : "Windows"));
|
||||
System.out.println();
|
||||
|
||||
Application app = new Application(factory);
|
||||
app.render();
|
||||
app.simulateClick();
|
||||
|
||||
System.out.println("\n--- Forcing Mac UI ---");
|
||||
Application macApp = new Application(new MacFactory());
|
||||
macApp.render();
|
||||
macApp.simulateClick();
|
||||
}
|
||||
}
|
||||
6
01-creational/abstract-factory/WindowsButton.java
Normal file
6
01-creational/abstract-factory/WindowsButton.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package abstractfactory;
|
||||
|
||||
public class WindowsButton implements Button {
|
||||
@Override public void render() { System.out.println("[Windows] Rendering button with square corners"); }
|
||||
@Override public void onClick() { System.out.println("[Windows] Button clicked - raised border effect"); }
|
||||
}
|
||||
5
01-creational/abstract-factory/WindowsCheckbox.java
Normal file
5
01-creational/abstract-factory/WindowsCheckbox.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package abstractfactory;
|
||||
|
||||
public class WindowsCheckbox implements Checkbox {
|
||||
@Override public void render() { System.out.println("[Windows] Rendering checkbox with square tick box"); }
|
||||
}
|
||||
6
01-creational/abstract-factory/WindowsFactory.java
Normal file
6
01-creational/abstract-factory/WindowsFactory.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package abstractfactory;
|
||||
|
||||
public class WindowsFactory implements GUIFactory {
|
||||
@Override public Button createButton() { return new WindowsButton(); }
|
||||
@Override public Checkbox createCheckbox() { return new WindowsCheckbox(); }
|
||||
}
|
||||
Reference in New Issue
Block a user