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