java的設計模式——簡單工廠
阿新 • • 發佈:2018-12-31
意圖:定義一個建立物件的介面,讓其子類自己決定例項化哪一個工廠類,工廠模式使其建立過程延遲到子類進行。
主要解決:主要解決介面選擇的問題。
實現
我們將建立一個 Shape 介面和實現 Shape 介面的實體類。下一步是定義工廠類 ShapeFactory。
FactoryPatternDemo,我們的演示類使用 ShapeFactory 來獲取 Shape 物件。它將向 ShapeFactory 傳遞資訊(CIRCLE / RECTANGLE / SQUARE),以便獲取它所需物件的型別。
步驟 1
建立一個介面。
Shape.java
publicinterfaceShape{void draw();}
步驟 2
建立實現介面的實體類。
Rectangle.java
publicclassRectangleimplementsShape{@Overridepublicvoid draw(){System.out.println("Inside Rectangle::draw() method.");}}
Square.java
publicclassSquareimplementsShape{@Overridepublicvoid draw(){System.out.println("Inside Square::draw() method.");}}
Circle.java
publicclassCircleimplementsShape{@Overridepublicvoid draw(){System.out.println("Inside Circle::draw() method.");}}
步驟 3
建立一個工廠,生成基於給定資訊的實體類的物件。
ShapeFactory.java
publicclassShapeFactory{//使用 getShape 方法獲取形狀型別的物件publicShape getShape(String shapeType){if(shapeType ==null){returnnull;}if(shapeType.equalsIgnoreCase("CIRCLE")){returnnewCircle();}elseif(shapeType.equalsIgnoreCase("RECTANGLE")){returnnewRectangle();}elseif(shapeType.equalsIgnoreCase("SQUARE")){returnnewSquare();}returnnull;}}
步驟 4
使用該工廠,通過傳遞型別資訊來獲取實體類的物件。
FactoryPatternDemo.java
publicclassFactoryPatternDemo{publicstaticvoid main(String[] args){ShapeFactory shapeFactory =newShapeFactory();//獲取 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();}}
步驟 5
驗證輸出。
InsideCircle::draw() method.InsideRectangle::draw() method.InsideSquare::draw() method.