Abstract Factory Pattern
This commit is contained in:
18
design-pattern/src/AbstractFactory2/Main.java
Normal file
18
design-pattern/src/AbstractFactory2/Main.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package AbstractFactory2;
|
||||
|
||||
import AbstractFactory2.abst.Button;
|
||||
import AbstractFactory2.abst.GuiFactory;
|
||||
import AbstractFactory2.abst.TextArea;
|
||||
import AbstractFactory2.concrete.FactoryInstance;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
GuiFactory factory = FactoryInstance.getGuiFactory();
|
||||
|
||||
Button button = factory.createButton();
|
||||
TextArea textArea = factory.createTextArea();
|
||||
|
||||
button.click();
|
||||
System.out.println(textArea.getText());
|
||||
}
|
||||
}
|
||||
6
design-pattern/src/AbstractFactory2/abst/Button.java
Normal file
6
design-pattern/src/AbstractFactory2/abst/Button.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package AbstractFactory2.abst;
|
||||
|
||||
public interface Button {
|
||||
|
||||
void click();
|
||||
}
|
||||
7
design-pattern/src/AbstractFactory2/abst/GuiFactory.java
Normal file
7
design-pattern/src/AbstractFactory2/abst/GuiFactory.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package AbstractFactory2.abst;
|
||||
|
||||
public interface GuiFactory {
|
||||
|
||||
Button createButton();
|
||||
TextArea createTextArea();
|
||||
}
|
||||
5
design-pattern/src/AbstractFactory2/abst/TextArea.java
Normal file
5
design-pattern/src/AbstractFactory2/abst/TextArea.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package AbstractFactory2.abst;
|
||||
|
||||
public interface TextArea {
|
||||
String getText();
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package AbstractFactory2.concrete;
|
||||
|
||||
import AbstractFactory2.abst.Button;
|
||||
import AbstractFactory2.abst.GuiFactory;
|
||||
import AbstractFactory2.abst.TextArea;
|
||||
|
||||
public class FactoryInstance {
|
||||
|
||||
public static GuiFactory getGuiFactory() {
|
||||
|
||||
switch (getOsCode()) {
|
||||
case 0: return new MacGuiFactory();
|
||||
case 1: return new WinGuiFactory();
|
||||
case 2: return new LinuxGuiFactory();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static int getOsCode() {
|
||||
if (System.getProperty("os.name").equals("Windows 10")){
|
||||
return 1;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
class LinuxButton implements Button {
|
||||
@Override
|
||||
public void click() {
|
||||
System.out.println("Linux Button");
|
||||
}
|
||||
}
|
||||
class LinuxGuiFactory implements GuiFactory {
|
||||
@Override
|
||||
public Button createButton() {
|
||||
return new LinuxButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextArea createTextArea() {
|
||||
return new LinuxTextArea();
|
||||
}
|
||||
}
|
||||
class LinuxTextArea implements TextArea {
|
||||
@Override
|
||||
public String getText() {
|
||||
return "Linux TextArea";
|
||||
}
|
||||
}
|
||||
class MacButton implements Button {
|
||||
@Override
|
||||
public void click() {
|
||||
System.out.println("Mac button");
|
||||
}
|
||||
}
|
||||
class MacGuiFactory implements GuiFactory {
|
||||
@Override
|
||||
public Button createButton() {
|
||||
return new MacButton();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextArea createTextArea() {
|
||||
return new MacTextArea();
|
||||
}
|
||||
}
|
||||
class MacTextArea implements TextArea {
|
||||
@Override
|
||||
public String getText() {
|
||||
return "Mac TextArea";
|
||||
}
|
||||
}
|
||||
class WinButton implements Button {
|
||||
@Override
|
||||
public void click() {
|
||||
System.out.println("Win button");
|
||||
}
|
||||
}
|
||||
class WinGuiFactory implements GuiFactory {
|
||||
@Override
|
||||
public Button createButton() {
|
||||
return new WinButton();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextArea createTextArea() {
|
||||
return new WinTextArea();
|
||||
}
|
||||
}
|
||||
class WinTextArea implements TextArea {
|
||||
@Override
|
||||
public String getText() {
|
||||
return "Win TextArea";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user