一、工廠方法
1.特點
定義一個創建產品對象的工廠接口,將產品對象的實際創建工作推遲到具體子工廠類當中。這滿足創建型模式中所要求的“創建與使用相分離”的特點。
2.簡單工廠
簡單工廠不在23中設計模式中,因爲它違背了開閉原則。在新增產品的時候,需要重新修改Factory類的代碼。而工廠方法是對簡單工廠的一種改進,在新增產品的時候,不需要修改原來的代碼。
二、實現
package com.factory;
public class Test {
public static void main(String[] args) {
MyFactory factory = new FactoryOne();
Product product1 = factory.newProduct();
product1.show();
}
}
//產品接口
interface Product{
void show();
}
//產品1
class ProductImplOne implements Product{
@Override
public void show() {
System.out.println("我是one");
}
}
//產品2
class ProductImplTwo implements Product{
@Override
public void show() {
System.out.println("我是two");
}
}
//工廠接口
interface MyFactory{
Product newProduct();
}
//工廠1
class FactoryOne extends ProductImplOne implements MyFactory{
@Override
public Product newProduct() {
return new ProductImplOne();
}
}
//工廠2
class FactoryTwo extends ProductImplTwo implements MyFactory{
@Override
public Product newProduct() {
return new ProductImplTwo();
}
}
三、總結
工廠方法模式的主要優點有:
- 用戶只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體創建過程;
- 在系統增加新的產品時只需要添加具體產品類和對應的具體工廠類,無須對原工廠進行任何修改,滿足開閉原則;
其缺點是:每增加一個產品就要增加一個具體產品類和一個對應的具體工廠類,這增加了系統的複雜度。