定義:
- 稱爲靜態工廠方法(Static Factory Method)模式,它屬於類創建型模式。
- 在簡單工廠模式中,可以根據參數的不同返回不同類的實例
優勢
- 對象的創建和對象的使用實現了分離,客服端不需要了解實現細節,降低耦合度
- 當你需要什麼,只需要傳入一個正確的參數,就可以獲取你所需要的對象,而無須知道其創建細節。
劣勢:
- 不符合開閉原則,添加新產品需要修改邏輯代碼
結構:
工廠角色 | 工廠核心類,負責創建具體的目標類 |
抽象目標 | 規範子類的公共屬性 |
具體目標 | 實現抽象功能,一般是多個實現類,工廠類創建就是該類類的對象 |
UML圖:
工廠類:
package com.project.factory.simplefactory;
import com.project.factory.methodfactory.ICar;
import com.project.factory.simplefactory.impl.Aody;
import com.project.factory.simplefactory.impl.Byd;
/**
* 簡單工廠類,傳入創建車型,創建相應車型,缺陷不能添加車型
* @author Administrator
*
*/
public class SimpleFactory {
public ICar createCar(String type) {
if (type.equals("奧迪")) {
return new Aody();
} else if (type.equals("比亞迪")) {
return new Byd();
}
return null;
}
}
抽象目標:
package com.project.factory.simplefactory;
/**
* 卡車接口
* @author Administrator
*
*/
public interface ICar {
/**
* 卡車奔跑
*/
public void run();
}
實現類:
package com.project.factory.simplefactory.impl;
import com.project.factory.methodfactory.ICar;
/**
* 奧迪車
* @author Administrator
*
*/
public class Aody implements ICar {
@Override
public void run() {
System.out.println("奧迪跑");
}
}
package com.project.factory.simplefactory.impl;
import com.project.factory.methodfactory.ICar;
/**
* 比亞迪車
* @author Administrator
*
*/
public class Byd implements ICar {
@Override
public void run() {
System.out.println("比亞迪跑");
}
}
測試類:
package com.project.factory.simplefactory;
import com.project.factory.methodfactory.ICar;
import com.project.factory.simplefactory.impl.Aody;
import com.project.factory.simplefactory.impl.Byd;
public class Client {
public static void main(String[] args) {
SimpleFactory factory = new SimpleFactory();
ICar car = factory.createCar("奧迪");
System.out.println(car);
}
}