簡體   English   中英

工廠在 Java 當具體對象采用不同的構造函數參數時

[英]Factory in Java when concrete objects take different constructor parameters

我正在嘗試在 Java 中實現工廠模式。 我有一個名為 Shape 的 class ,其中圓形和三角形延伸。 問題是 Shape 構造函數只獲得 2 個參數,而 Circle 獲得 3 個參數,Triangle 也是如此(我不會在代碼部分顯示,因為與 Circle 相同)。 為了更好地展示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

任何想法如何克服這個問題? 我不能從工廠內部接收用戶的輸入(必須從外部接收)。

謝謝!

我正在嘗試在Java中實現Factory模式。 我有一個名為Shape的類,該類由圓形和三角形延伸。 問題在於Shape構造函數僅獲取2個參數,而Circle則獲取3個參數,Triangle也是如此(由於與Circle相同,因此我不會在代碼部分中顯示)。 為了更好地演示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

任何想法如何克服這個問題? 我一定不能從工廠內部接收用戶的輸入(必須從外部接收)。

謝謝!

我正在嘗試在Java中實現Factory模式。 我有一個名為Shape的類,該類由圓形和三角形延伸。 問題在於Shape構造函數僅獲取2個參數,而Circle則獲取3個參數,Triangle也是如此(由於與Circle相同,因此我不會在代碼部分中顯示)。 為了更好地演示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

任何想法如何克服這個問題? 我一定不能從工廠內部接收用戶的輸入(必須從外部接收)。

謝謝!

我正在嘗試在Java中實現Factory模式。 我有一個名為Shape的類,該類由圓形和三角形延伸。 問題在於Shape構造函數僅獲取2個參數,而Circle則獲取3個參數,Triangle也是如此(由於與Circle相同,因此我不會在代碼部分中顯示)。 為了更好地演示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

任何想法如何克服這個問題? 我一定不能從工廠內部接收用戶的輸入(必須從外部接收)。

謝謝!

我正在嘗試在Java中實現Factory模式。 我有一個名為Shape的類,該類由圓形和三角形延伸。 問題在於Shape構造函數僅獲取2個參數,而Circle則獲取3個參數,Triangle也是如此(由於與Circle相同,因此我不會在代碼部分中顯示)。 為了更好地演示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

任何想法如何克服這個問題? 我一定不能從工廠內部接收用戶的輸入(必須從外部接收)。

謝謝!

我正在嘗試在Java中實現Factory模式。 我有一個名為Shape的類,該類由圓形和三角形延伸。 問題在於Shape構造函數僅獲取2個參數,而Circle則獲取3個參數,Triangle也是如此(由於與Circle相同,因此我不會在代碼部分中顯示)。 為了更好地演示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }

任何想法如何克服這個問題? 我一定不能從工廠內部接收用戶的輸入(必須從外部接收)。

謝謝!

工廠參數不是必須是對象到構造的構造函數的參數,而只是構造邏輯所必需的信息; 例如,DataSource 工廠方法可能不接收任何參數,所有這些參數可能已經存在(又名配置)到工廠中(例如 maxConnections)。 所以你的工廠方法的參數可以是任何東西,例如包含對象到構造構造函數參數的 object; 此外,該參數對象可用於識別要創建的 object 類型

根據書(設計模式):

該模式的另一個變體允許工廠方法創建多種產品。 工廠方法采用一個參數來標識要創建的 object 的種類。 工廠方法創建的所有對象都將共享 Product 接口。 在文檔示例中,應用程序可能支持不同類型的文檔。 您向 CreateDocument 傳遞一個額外的參數來指定要創建的文檔的類型。

很難知道這是否完全解決了 OP 的問題(僅晚了 9 年。)但鑒於提供的信息,這似乎是這樣做的,設計模式第 114 頁有一個工廠有多個 create() 方法的示例。 這可以轉化為這樣的東西。

public interface ShapeFactory {
  Circle createCircle(int radius);
  Triangle createTriangle(int l1, int l2, int l3);
}

public class MockShapeFactory {
  Circle createCircle(int radius) {
    return new MockCircle();
  }

  Triangle createTriangle(int l1, int l2, int l3) {
    return new MockTriangle();
  }
}

public class RasterShapeFactory {
  Circle createCircle(int radius) {
    return new MockCircle(radius);
  }

  Triangle createTriangle(int l1, int l2, int l3) {
    return new MockTriangle(l1, l2, l3);
  }
}

盡管采用不同的參數,每個創建的 Shape 仍然可以實現一個通用接口。 (忽略在這個理論示例中讓這些類實現 draw() 方法的“可疑性”......)

public interface Shape {
  draw();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM