在Java中,工廠模式可以通過兩種方式來實現:簡單工廠模式和抽象工廠模式。
簡單工廠模式: 簡單工廠模式的核心是定義一個工廠類,該類負責創建其他類的實例。具體步驟如下:
示例代碼如下:
// 抽象產品類
public abstract class Product {
public abstract void use();
}
// 具體產品類A
public class ConcreteProductA extends Product {
@Override
public void use() {
System.out.println("使用具體產品A");
}
}
// 具體產品類B
public class ConcreteProductB extends Product {
@Override
public void use() {
System.out.println("使用具體產品B");
}
}
// 工廠類
public class Factory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ConcreteProductA();
} else if (type.equals("B")) {
return new ConcreteProductB();
}
return null;
}
}
// 客戶端
public class Client {
public static void main(String[] args) {
Product productA = Factory.createProduct("A");
productA.use(); // 使用具體產品A
Product productB = Factory.createProduct("B");
productB.use(); // 使用具體產品B
}
}
抽象工廠模式: 抽象工廠模式將具體產品的創建推遲到了具體工廠類中,通過定義工廠接口和產品接口來實現。具體步驟如下:
示例代碼如下:
// 抽象產品接口
public interface Product {
void use();
}
// 具體產品類A
public class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("使用具體產品A");
}
}
// 具體產品類B
public class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("使用具體產品B");
}
}
// 抽象工廠接口
public interface Factory {
Product createProduct();
}
// 具體工廠類A
public class ConcreteFactoryA implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
// 具體工廠類B
public class ConcreteFactoryB implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
// 客戶端
public class Client {
public static void main(String[] args) {
Factory factoryA = new ConcreteFactoryA();
Product productA = factoryA.createProduct();
productA.use(); // 使用具體產品A
Factory factoryB = new ConcreteFactoryB();
Product productB = factoryB.createProduct();
productB.use(); // 使用具體產品B
}
}
這樣,通過工廠模式,可以將對象的創建和使用解耦,使得客戶端不需要關心具體產品的創建細節,只需要使用工廠類來獲取產品實例。