概述
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
分类
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式可以分为三类:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
区别
- 工厂方法模式
一个抽象工厂类,可以派生出多个具体工厂类
每个具体工厂类只能创建一个具体产品类的实例
一个抽象产品类,可以派生出多个具体产品类
- 抽象工厂模式
一个抽象工厂类,可以派生出多个具体工厂类
多个具体工厂类可以创建多个具体产品类的实例
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类
简单工厂模式
产品类:
abstract class BMW {
public BMW(){
}
}
public class BMW320 extends BMW {
public BMW320() {
System.out.println("制造-->BMW320");
}
}
public class BMW523 extends BMW{
public BMW523(){
System.out.println("制造-->BMW523");
}
}
工厂类:
public class Factory {
public BMW createBMW(int type) {
switch (type) {
case 320:
return new BMW320();
case 523:
return new BMW523();
default:
break;
}
return null;
}
}
客户类:
public class Customer {
public static void main(String[] args) {
Factory factory = new Factory();
BMW bmw320 = factory.createBMW(320);
BMW bmw523 = factory.createBMW(523);
}
}
工厂方法模式
产品类:
public abstract class Computer {
abstract Computer create();
}
public class DELLComputer extends Computer {
@Override
Computer create() {
System.out.println("生产出了DELL电脑");
return this;
}
}
public class HPComputer extends Computer {
@Override
Computer create() {
System.out.println("生产出了HP电脑");
return this;
}
}
工厂类:
public interface ComputerFactory {
Computer product();
}
public class DELLFactory implements ComputerFactory {
@Override
public Computer product() {
Computer computer = new DELLComputer();
System.out.println("生产Dell电脑");
return computer.create();
}
}
public class HPFactory implements ComputerFactory {
@Override
public Computer product() {
Computer computer = new HPComputer();
System.out.println("生产HP电脑");
return computer.create();
}
}
客户类:
public class Customer {
public static void main(String[] args) {
ComputerFactory dellFactory = new DELLFactory();
Computer dellComputer = dellFactory.product();
ComputerFactory hpFactory = new HPFactory();
Computer hpComputer = hpFactory.product();
}
}