工廠模式-三種類型
阿新 • • 發佈:2019-01-06
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
Print.javapackage 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(); } } }
package cn.test.factorymethod;
public abstract class Print {
public abstract void print();
}
PrintEPSON.java
PrintHP.javapackage cn.test.factorymethod; public class PrintEPSON extends Print { @Override public void print() { System.out.println("I'm EPSON"); } }
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