工厂模式
工厂模式是创建型设计模式的一种,它包括工厂方法(Factory Method)和抽象工厂(Abstract Factory)。
工厂方法(Factory Method)
定义一个创建对象的接口,让其子类自己决定实例化哪一个类,工厂模式使对象的创建过程延迟到子类进行。这个比较好理解,以手机工厂生产苹果和华为手机为例:
首先定义接口:
public interface Phone {
void makePhone();
}
定义两个类:
public class Huawei implements Phone {
public Huawei(){
this.makePhone();
}
@Override
public void makePhone() {
System.out.println("Huawei Phone +1");
}
}
public class IPhone implements Phone {
public IPhone(){
this.makePhone();
}
@Override
public void makePhone() {
System.out.println("IPhone +1");
}
}
定义工厂:
public class PhoneFactory {
public Phone makePhone(String phonetype){
if (phonetype.equalsIgnoreCase("IPhone")){
return new IPhone();
}
else if (phonetype.equalsIgnoreCase("Huawei")){
return new Huawei();
}
return null;
}
}
测试:
public class Test {
public static void main(String[] args) {
PhoneFactory pf=new PhoneFactory();
Phone huawei=pf.makePhone("Huawei");
Phone iphone=pf.makePhone("IPhone");
}
}
输出结果:
Huawei Phone +1
IPhone +1
Process finished with exit code 0
可以看到,我们在创建对象的时候只需要告诉工厂我们需要什么对象,代替了原先new具体类的操作。并且还可以在工厂中扩展对象的种类,提高代码的可扩展性。
抽象工厂(Abstract Factory)
抽象工厂提供了一个接口以创建一系列相关或相互依赖的对象,而无需指定他们的具体类。具体来讲,就是在上面的手机工厂上再抽象出一个电子厂的接口,除手机工厂实现电子厂的接口之外,还会有电脑工厂,电视工厂等工厂类去实现电子厂的接口,然后相应的工厂类下面会有不同牌子的具体实现类去完成对象的实例化。在我看来抽象工厂相当于是范围更加广的一个工厂,如果说工厂方法单指一类工厂(手机,电脑等)的话,那么抽象工厂则是一个集团,里面可以包含多个工厂方法。