Java設計模式
Java工廠設計模式
Java抽象工廠模式
Java單例模式
Java建造者(Builder)模式
Java原型模式
Java適配器模式
Java橋接模式
Java過濾器模式(條件模式)
Java組合模式
Java裝飾模式
Java門面模式(或外觀模式)
Java享元模式(Flyweight Pattern)
Java責任鏈模式
Java命令模式
Java迭代器模式
Java中介者模式(Mediator Pattern)
Java解釋器模式
Java備忘錄模式
Java觀察者模式
Java狀態模式
Java空對象模式
Java策略模式
Java模板模式
Java訪問者模式
Java MVC模式
Java業務代理模式
Java組合實體模式
Java數據訪問對象模式
Java前端控制器模式
Java攔截過濾器模式
Java服務定位器模式
Java傳輸對象模式
Java工廠設計模式
工廠模式是Java中最常用的設計模式之一。 這種類型的設計模式屬於創建模式,因爲此模式提供了創建對象的最佳方法之一。
在工廠模式中,我們沒有創建邏輯暴露給客戶端創建對象,並使用一個通用的接口引用新創建的對象。
實現方法
我們將創建一個Shape接口和實現Shape接口的具體類。 一個工廠類ShapeFactory會在下一步中定義。
FactoryPatternDemo這是一個演示類,將使用ShapeFactory來獲取一個Shape對象。 它會將信息(CIRCLE/RECTANGLE/SQUARE)傳遞給ShapeFactory以獲取所需的對象類型。
實現工廠模式的結構如下圖所示 -
第1步
創建一個接口-
Shape.java
public interface Shape {
void draw();
}
第2步
創建實現相同接口的具體類。如下所示幾個類 -
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.");
}
}
第3步
創建工廠根據給定的信息生成具體類的對象。
ShapeFactory.java
public class ShapeFactory {
//use getShape method to get object of type shape
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;
}
}
第4步
使用工廠通過傳遞類型等信息來獲取具體類的對象。
FactoryPatternDemo.java
public class FactoryPatternDemo {
public static void main(String\[\] args) {
ShapeFactory shapeFactory = new ShapeFactory();
//get an object of Circle and call its draw method.
Shape shape1 = shapeFactory.getShape("CIRCLE");
//call draw method of Circle
shape1.draw();
//get an object of Rectangle and call its draw method.
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//call draw method of Rectangle
shape2.draw();
//get an object of Square and call its draw method.
Shape shape3 = shapeFactory.getShape("SQUARE");
//call draw method of circle
shape3.draw();
}
}
第5步
驗證輸出結果如下-
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.