Abstract Factory Pattern

This commit is contained in:
kim
2021-01-14 00:22:55 +09:00
parent 922c2854e5
commit 8017dc6fef
5 changed files with 133 additions and 0 deletions

View 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());
}
}

View File

@@ -0,0 +1,6 @@
package AbstractFactory2.abst;
public interface Button {
void click();
}

View File

@@ -0,0 +1,7 @@
package AbstractFactory2.abst;
public interface GuiFactory {
Button createButton();
TextArea createTextArea();
}

View File

@@ -0,0 +1,5 @@
package AbstractFactory2.abst;
public interface TextArea {
String getText();
}

View File

@@ -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";
}
}