工廠模式是Java中很常用的設計模式之一,主要用來提供一種創建對象的方式,在該設計模式中,創建對象的邏輯不會暴露給用戶,提供給用戶的是指向所創建對象的一個共同的接口。工廠模式大致可以分為三種,簡單工廠模式、工廠方法模式以及抽象工廠模式,這里我們先介紹簡單工廠模式。
介紹
目的
定義一個創建對象的接口,具體創建哪個對象由用戶決定后其實現類執行,將創建對象延遲到子類去執行。主要解決了接口的選擇問題。
場景
當我們需要在不同條件下創建不同對象時,只需要向工廠類指定想要生成的對象,工廠類便會直接生成對應的對象。
應用實例
當你需要一輛汽車時,向工廠說出你想要車的名字就可以直接提貨,不需要管該汽車是如何創建的。當你使用JDBC或者一些ORM框架去連接不同數據庫時,也可以使用工廠模式去設計。
代碼展示
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("I draw a Circle!!!");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("I draw a Rectangle!!!");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("I draw a Square!!!");
}
}
public class ShapeFactory {
public static final String CIRCLE = "CIRCLE";
public static final String SQUARE = "SQUARE";
public static final String RECTANGLE = "RECTANGLE";
public static Shape getShape(String type){
Shape shape = null;
switch (type){
case CIRCLE :
shape = new Circle();break;
case SQUARE :
shape = new Square();break;
case RECTANGLE :
shape = new Rectangle();break;
default: break;
}
return shape;
}
}
測試
public class Test {
public static void main(String[] args) {
Shape rectangle = ShapeFactory.getShape(ShapeFactory.RECTANGLE);
rectangle.draw();
Shape circle = ShapeFactory.getShape(ShapeFactory.CIRCLE);
circle.draw();
Shape square = ShapeFactory.getShape(ShapeFactory.SQUARE);
square.draw();
}
}
//結果
//I draw a Rectangle!!!
//I draw a Circle!!!
//I draw a Square!!!
優點
- 一個調用者想創建一個對象,只要知道其名稱就可以了。
- 屏蔽產品的具體實現,調用者只關心產品的接口。
缺點
每次增加一個產品時,都需要增加一個具體類和修改工廠類,耦合度高,可擴展性差,在一定程度上增加了系統的復雜度,同時也增加了系統具體類的依賴。