1. 程式人生 > >java的設計模式——簡單工廠

java的設計模式——簡單工廠

意圖:定義一個建立物件的介面,讓其子類自己決定例項化哪一個工廠類,工廠模式使其建立過程延遲到子類進行。

主要解決:主要解決介面選擇的問題。

實現

我們將建立一個 Shape 介面和實現 Shape 介面的實體類。下一步是定義工廠類 ShapeFactory

FactoryPatternDemo,我們的演示類使用 ShapeFactory 來獲取 Shape 物件。它將向 ShapeFactory 傳遞資訊(CIRCLE / RECTANGLE / SQUARE),以便獲取它所需物件的型別。

工廠模式的 UML 圖

步驟 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

publicclassCircleimplements
Shape{@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")){returnnew
Circle();}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.