我創建了以下示例。這是否遵循AbstractFactory設計模式?AbstractFactory設計模式
ButtonType.java
public enum ButtonType {
WIN, LINUX, MAC
}
Button.java
public interface Button {
ButtonType getButtonType();
void actionListener();
}
LinuxButton.java
public class LinuxButton implements Button {
@Override
public ButtonType getButtonType() {
return ButtonType.LINUX;
}
@Override
public void actionListener() {
System.out.println("Linux Button created");
}
}
WinButton.java
public class WinButton implements Button {
@Override
public ButtonType getButtonType() {
return ButtonType.WIN;
}
@Override
public void actionListener() {
System.out.println("Window Button Created");
}
}
MacButton.java
public class MacButton implements Button {
@Override
public ButtonType getButtonType() {
return ButtonType.MAC;
}
@Override
public void actionListener() {
System.out.println("Mac Button Created");
}
}
ButtonFactory.java
public interface ButtonFactory {
Button createButton();
}
LinuxButtonFactory.java
public class LinuxButtonFactory implements ButtonFactory {
@Override
public Button createButton() {
System.out.println("creating Linux Button");
return new LinuxButton();
}
}
WinButtonFactory.java
public class WinButtonFactory implements ButtonFactory {
@Override
public Button createButton() {
System.out.println("creating window Button");
return new WinButton();
}
}
MacButtonFactory.java
public class MacButtonFactory implements ButtonFactory {
@Override
public Button createButton() {
System.out.println("Creating MAC Button");
return new MacButton();
}
}
AbstractButtonFactory.java
public abstract class AbstractButtonFactory {
public static ButtonFactory getButtonFactory(ButtonType bt) {
ButtonFactory btnFactory = null;
switch (bt) {
case WIN:
btnFactory = new WinButtonFactory();
break;
case LINUX:
btnFactory = new LinuxButtonFactory();
break;
default:
btnFactory = new MacButtonFactory();
}
return btnFactory;
}
}
終於主要CALSS
public class AbstractFactoryObjectDemo {
public static void main(String[] args) {
ButtonFactory factory = AbstractButtonFactory.getButtonFactory(ButtonType.LINUX);
Button linuxButton = factory.createButton();
System.out.println(linuxButton.getButtonType().toString());
}
}
我想確認是這種模式遵循AbstractFactory設計模式,如果它不應該怎樣進行的更改?
你已經提取了按鈕和工廠 - 對我來說很好看。你的特別關注點在哪裏? –
@Andreas_D:AbstractButtonFactory.java,它是正確的嗎? – optional