1.普通工廠模式
可以封裝不同的實作,統一為一個方法,但是需要傳不同的參數。使得程式容易維護和擴充。
Test.java
package cn.test.factorymethod;
public class Test {
public static void main(String[] args) {
//執行個體化工廠
Factory factory = new Factory();
Print print = factory.createWindow("HP");
print.print();
Print print2 = factory.createWindow("EPSON");
print2.print();
}
}
Factory.java
package cn.test.factorymethod;
public class Factory {
public Print createWindow (String type) {
if(type.equals("HP")) {
return new PrintHP();
} else if(type.equals("EPSON")) {
return new PrintEPSON();
} else{
return new PrintHP();
}
}
}
Print.java
package cn.test.factorymethod;
public abstract class Print {
public abstract void print();
}
PrintEPSON.java
package cn.test.factorymethod;
public class PrintEPSON extends Print {
@Override
public void print() {
System.out.println("I'm EPSON");
}
}
PrintHP.java
package cn.test.factorymethod;
public class PrintHP extends Print {
@Override
public void print() {
System.out.println("I'm HP");
}
}
傳回結果:
I'm EPSON
I'm HP
2.多個工廠模式
在普通工廠方法模式中,如果傳遞的字元串出錯,則不能正确建立對象,而多個工廠方法模式是提供多個工廠方法,分别建立對象
修改Factory.java類如下:
package cn.test.factorymethod;
public class Factory {
public Print epson(){
return new PrintEPSON();
}
public Print hp(){
return new PrintHP();
}
}
修改Test.java類如下:
package cn.test.factorymethod;
public class Test {
public static void main(String[] args) {
// 執行個體化工廠
Factory factory = new Factory();
Print print = factory.epson();
print.print();
Print print2 = factory.hp();
print2.print();
}
}
傳回結果:
I'm EPSON
I'm HP
3.靜态工廠模式
将上面的多個工廠方法模式裡的方法置為靜态的,不需要建立執行個體,直接調用即可。
修改Factory.java類如下:
package cn.test.factorymethod;
public class Factory {
public static Print epson(){
return new PrintEPSON();
}
public static Print hp(){
return new PrintHP();
}
}
修改Test.java類如下:
package cn.test.factorymethod;
public class Test {
public static void main(String[] args) {
Print print = Factory.epson();
print.print();
Print print2 = Factory.hp();
print2.print();
}
}
傳回結果:
I'm EPSON
I'm HP