設計模式之工廠模式——Java語言描述
阿新 • • 發佈:2019-01-11
工廠模式是Java中常見的設計模式之一,該設計模式屬於建立型模式,提供了一種建立物件的最佳方式。在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件
介紹
應用例項
當我們需要購買一輛汽車時,只需要從工廠提貨而不需要知道汽車是如何製造出來的以及這個汽車的具體實現。
優點
- 呼叫者只需要知道物件的名稱就可以建立一個物件
- 拓展性高
- 遮蔽產品的具體實現,呼叫者只關心產品的介面
缺點
每次增加一個產品時,都需要響應的增加一個具體類以及物件實現工廠,使得系統中的類的個數成倍增加。一定程度上增加了系統的複雜度,以及系統對具體類的依賴。
實現
我們將會建立一個能夠產生實現了Shape介面的實體類,專案的UML圖如下:
建立一個介面
public interface Shape {
void draw();
}
建立實體類
Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
Square.java
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
建立工廠類
ShapeFactory.java
public class ShapeFactory {
//使用 getShape 方法獲取形狀型別的物件
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
使用工廠類
FactoryPatternDemo.java
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
//獲取 Circle 的物件,並呼叫它的 draw 方法
Shape shape1 = shapeFactory.getShape("CIRCLE");
//呼叫 Circle 的 draw 方法
shape1.draw();
//獲取 Rectangle 的物件,並呼叫它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//呼叫 Rectangle 的 draw 方法
shape2.draw();
//獲取 Square 的物件,並呼叫它的 draw 方法
Shape shape3 = shapeFactory.getShape("SQUARE");
//呼叫 Square 的 draw 方法
shape3.draw();
}
}
輸出結果
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.