一句话概括:根据提供参数的不同实例化并返回不同的实现类。
当一个超类拥有众多子类,且我们需要返回其中一个子类时可以使用工厂模式。工厂模式将子类实例化的任务由客户端转嫁给工厂类。
工厂设计模式(Factory Design Pattern)也被称为工厂方法设计模式(Factory Method Design Pattern)
Factory Design Pattern Super Class
在工厂模式中,超类可以是接口、抽象类或者是普通的JAVA类。
public abstract class Computer {
public abstract String getRAM();
public abstract String getHDD();
public abstract String getCPU();
@Override
public String toString(){
return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU();
}
}
Factory Design Pattern Sub Classes
定义两个子类PC和Server
public class PC extends Computer {
private String ram;
private String hdd;
private String cpu;
public PC(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
两个类都继承于父类Computer
public class Server extends Computer {
private String ram;
private String hdd;
private String cpu;
public Server(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
Factory Class
我们已经有了一个超类和它的两个子类,现在我们可以开始定义工厂类
public class ComputerFactory {
public static Computer getComputer(String type, String ram, String hdd, String cpu){
if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
return null;
}
}
关于工厂类有两点比较重要的:
- 我们可以让工厂类是单例(Singleton)或者我们可以用定义工厂方法为静态方法。
- 根据传入参数的不同,返回不同的子类的实例。
下面是简单的调用方法:
public class TestFactory {
public static void main(String[] args) {
Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
System.out.println("Factory PC Config::"+pc);
System.out.println("Factory Server Config::"+server);
}
}
执行结果为
Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz
Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
Factory Design Pattern Advantages
工厂设计模式的优势有:
- 工厂设计模式提供了一种基于接口的编程而不是关注其实现。
- 工厂设计模式从客户端中移除了子类的实例化部分。工厂设计模式让我们的代码更健壮、更少的耦合且易于拓展。
- 工厂模式通过继承提供子类实现和客户端类之间的抽象。