定義:定義一個用于建立對象的接口,讓子類決定執行個體化哪個類,工廠方法使一個類的執行個體化延遲到子類。
其通用格式為:
産品的接口
public interface Product {
void method();
}
具體産品
public class ConcreteProduct2 implements Product {
public void method() {
//具體處理
System.out.println("this is ConcreteProduct2");
}
}
public class ConcreteProduct1 implements Product {
public void method() {
//具體處理
System.out.println("this is ConcreteProduct1");
}
}
抽象工廠類
public abstract class Creator {
//建立Product
public abstract <T extends Product> T createProduct(Class<T> c);
}
具體工廠類
public class ConcreteCreator extends Creator {
public <T extends Product> T createProduct(Class<T> c) {
Product product = null;
try {
product = (Product) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
//異常處理
}
return (T) product;
}
}
場景類
public class Client {
public static void main(String[] args) {
Creator creator = new ConcreteCreator();
ConcreteProduct1 product = creator.createProduct(ConcreteProduct1.class);
// 具體業務處理
product.method();
}
}
優點
- 良好的封裝性,代碼結構清晰。建立産品隻需要知道産品的類名即可,不用知道建立過程,降低子產品間的耦合度。
- 易于擴充。增加産品時隻需要建立産品實作接口即可。
- 屏蔽産品。産品類實作如何變化調用者不需要關心,隻需要關心産品的接口,隻要産品接口不變化,系統中的上層子產品就不需要變化。