文章目录
一、什么是抽象工厂模式?
Java抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的方式,而无需指定它们的具体类。它通过将创建逻辑委托给工厂类和工厂接口来实现,这些工厂类和接口定义了一组用于创建不同类型对象的抽象方法。具体实现工厂接口的工厂类可以创建具体的产品对象,而这些产品对象都实现了同一个抽象产品接口。使用抽象工厂模式可以在不改变客户端代码的情况下,轻松地切换产品系列,实现更好的扩展性和灵活性。
Java抽象工厂模式的实现需要以下几个组件:
- 抽象工厂接口:定义了一组用于创建不同类型对象的抽象方法。
- 具体工厂类:实现抽象工厂接口,具体实现了工厂接口中定义的抽象方法,用于创建具体的产品对象。
- 抽象产品接口:定义了产品对象的基本属性和行为。
- 具体产品类:实现抽象产品接口,具体实现了产品接口中定义的抽象方法,提供具体的产品实现。
二、工厂模式分类对比
(图引用,个人觉得很形象)
简单工厂就是提供了一个选择产品的方法,在方法内部抉择产品,而你想要什么样的产品就通过改接口的实现类去获取。
工厂方法则是提供工厂的方法,它是提供了产品的实现,也就是说想要什么样产品就去调用该产品的工厂。
抽象工厂是提供了组合工厂的方法,它是类型相同的工厂放在一起,不同的产品但类型相同却可以调用一个工厂。
三、简单案例
下面是一个使用Java抽象工厂模式创建不同类型的电脑的示例代码:
首先,我们定义一个抽象电脑接口Computer和两个具体电脑类:Laptop和Desktop。
public interface Computer {
String getRAM();
String getHDD();
String getCPU();
}
public class Laptop implements Computer {
private String ram;
private String hdd;
private String cpu;
public Laptop(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
public String getRAM() {
return this.ram;
}
public String getHDD() {
return this.hdd;
}
public String getCPU() {
return this.cpu;
}
}
public class Desktop implements Computer {
private String ram;
private String hdd;
private String cpu;
public Desktop(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
public String getRAM() {
return this.ram;
}
public String getHDD() {
return this.hdd;
}
public String getCPU() {
return this.cpu;
}
}
接下来,我们定义一个抽象工厂接口ComputerFactory,它包含了创建Laptop和Desktop对象的抽象方法。
public interface ComputerFactory {
public Computer createComputer();
}
我们还需要定义两个具体工厂类:LaptopFactory和DesktopFactory,分别用于创建Laptop和Desktop对象。
public class LaptopFactory implements ComputerFactory {
private String ram;
private String hdd;
private String cpu;
public LaptopFactory(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
public Computer createComputer() {
return new Laptop(ram, hdd, cpu);
}
}
public class DesktopFactory implements ComputerFactory {
private String ram;
private String hdd;
private String cpu;
public DesktopFactory(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
public Computer createComputer() {
return new Desktop(ram, hdd, cpu);
}
}
现在,我们可以使用这些类来创建不同类型的电脑。在下面的示例中,我们使用LaptopFactory创建一个笔记本电脑对象,并使用DesktopFactory创建一个台式电脑对象。
public class Main {
public static void main(String[] args) {
ComputerFactory laptopFactory = new LaptopFactory("16 GB", "1 TB", "2.4 GHz");
Computer laptop = laptopFactory.createComputer();
System.out.println("Laptop Config::"+laptop);
ComputerFactory desktopFactory = new DesktopFactory("32 GB", "2 TB", "3.5 GHz");
Computer desktop = desktopFactory.createComputer();
System.out.println("Desktop Config::"+desktop);
}
}
这样,我们就使用Java抽象工厂模式创建了不同类型的电脑对象,而无需关心它们的具体类。