02 工厂模式(Factory Design Pattern)

一句话概括:根据提供参数的不同实例化并返回不同的实现类。

当一个超类拥有众多子类,且我们需要返回其中一个子类时可以使用工厂模式。工厂模式将子类实例化的任务由客户端转嫁给工厂类。

工厂设计模式(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

工厂设计模式的优势有:

  • 工厂设计模式提供了一种基于接口的编程而不是关注其实现。
  • 工厂设计模式从客户端中移除了子类的实例化部分。工厂设计模式让我们的代码更健壮、更少的耦合且易于拓展。
  • 工厂模式通过继承提供子类实现和客户端类之间的抽象。

你可能感兴趣的:(02 工厂模式(Factory Design Pattern))