工廠方法模式

工廠方法模式:定義一個建立對象的接口,但讓實現這個接口的類來決定實例化哪一個類,也就是說工廠方法模式讓實例化推遲到子類ide

應用場景:code

  • 客戶只知道建立產品的工廠名,而不知道具體的產品名
  • 建立對象的任務由多個具體子工廠中的某一個完成,而抽象工廠只提供建立產品的接口。
  • 客戶不關心建立產品的細節,只關心產品的品牌

工廠方法模式的組件:對象

  • Factory(抽象工廠):提供了建立產品的接口,調用者經過它訪問具體工廠的工廠方法來建立產品。
  • ConcreteFactory(具體工廠):主要是實現抽象工廠中的抽象方法,完成具體產品的建立
  • Product(抽象產品):定義了產品的規範,描述了產品的主要特性和功能
  • ConcreteProduct(具體產品):實現了抽象產品角色所定義的接口,由具體工廠來建立,它同具體工廠之間一一對應

工廠方法模式組件示例:
抽象產品:接口

public interface Shape {
    void shapeDesc();
}

具體產品:產品

public class Circle implements Shape {
    @Override
    public void shapeDesc() {
        System.out.println("這是一個圓形");
    }
}
public class Rectangle implements Shape {
    @Override
    public void shapeDesc() {
        System.out.println("這是一個矩形");
    }
}
public class Square implements Shape {
    @Override
    public void shapeDesc() {
        System.out.println("這是一個正方形");
    }
}

抽象工廠:class

public interface Factory {
    Shape createShape();
}

具體工廠:方法

public class CircleFactory implements Factory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}
public class RectangleFactory implements Factory {
    @Override
    public Shape createShape() {
        return new Rectangle();
    }
}
public class SquareFactory implements Factory {
    @Override
    public Shape createShape() {
        return new Square();
    }
}

工廠方法模式總結:im

  • 新增一種產品時,只須要增長相應的具體產品類和相應的工廠子類便可,更符合開-閉原則
  • 每一個具體工廠類只負責建立對應的產品,更符合單一職責原則
  • 若產品過多時,會致使系統類的個數將成對增長,在必定程度上增長了系統的複雜度
相關文章
相關標籤/搜索