工廠模式分為三種:簡單工廠模式,工廠方法模式,抽象工廠模式。我看有的書上和有的文章里是分為兩種,沒有簡單工廠。 工廠模式主要的作用是:一個對象在實例化的時候可以選擇多個類,在實例化的時候根據一些業務規則來選擇實例化哪個類。 1.先定義一個圖形介面,有一個畫方法 2.再創建兩個實現介面的實體類 3.創 ...
工廠模式分為三種:簡單工廠模式,工廠方法模式,抽象工廠模式。我看有的書上和有的文章里是分為兩種,沒有簡單工廠。
工廠模式主要的作用是:一個對象在實例化的時候可以選擇多個類,在實例化的時候根據一些業務規則來選擇實例化哪個類。
1.先定義一個圖形介面,有一個畫方法
public interface Shape { void draw(); }
2.再創建兩個實現介面的實體類
public class Rectangle implements Shape { @Override public void draw() { System.out.println("畫長方形。"); } }
public class Square implements Shape { @Override public void draw() { System.out.println("畫正方形。"); } }
3.創建一個工廠,生成基於給定信息的實體類的對象
public class ShapeFactory { //使用 createShape 方法獲取形狀類型的對象 public Shape createShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } return null; } }
4.使用該工廠,通過傳遞類型信息來獲取實體類的對象。
public class SimpleFactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //獲取 Rectangle 的對象,並調用它的 draw 方法 Shape shape1 = shapeFactory.createShape("RECTANGLE"); //調用 Rectangle 的 draw 方法 shape1.draw(); //獲取 Square 的對象,並調用它的 draw 方法 Shape shape2 = shapeFactory.createShape("SQUARE"); //調用 Square 的 draw 方法 shape2.draw(); } }
輸出:
畫長方形。
畫正方形。
這裡Shape介面聲明的變數既可以用Rectangle實例化,也可以用Square實例化。ShapeFactory就是一個工廠,去決定怎麼實例化。
這個模式的缺點是對“開-閉”原則的支持不夠。如果要新加一個“產品”,比如新加一個實現Shape的圓形類,要在工廠里使用這個圓形類的話,需要去修改ShapeFactory工廠的代碼。
那麼應該怎麼解決這個缺點,下篇工廠方式模式就是解決這個問題。