【问题标题】:How write subfactories linked to their general factory (avoiding these subfactories to be linked to another factories)?如何写子工厂链接到他们的总工厂(避免这些子工厂链接到另一个工厂)?
【发布时间】:2021-04-03 10:24:52
【问题描述】:

我使用 Spring 框架在 Java 中编程。 但是我有一个关于设计模式的问题。

我有一个包含 3 个部分、3 个“大”部分的 X 类: 一种 乙 C

class X {
   private A a;
   private B b;
   private C c;
   // getters and setters
}

我为这个类创建了一个工厂,其中包含 3 个大私有方法来构造 X 类型对象的 3 个部分。

@Service
class XFactoryImpl implements XFactory {

    @Override
    X createX(InputData inputData) {
       X x = new X();
       x.setA(createA(inputData);
       x.setB(createB(inputData);
       x.setC(createC(inputData);
       return x;
    }

    private A createA(InputData inputData) {
       A a = new A();
       // lot of code lines
      return a;
    }

    private B createB(InputData inputData) {
       B b = new B();
       // lot of code lines
       return b;
    }

    private C createC(InputData inputData) {
       C c = new C();
       // lot of code lines
      return c;
    }

}

问题如下: 由于 3 个私有方法 createA、createB 和 createC 是大方法, 工厂实现类很大。

一种解决方案可能是创建 3 个“子工厂”并将这 3 个子工厂注入到类 FactoryX 中,一个用于 A 类对象,一个用于 B 类对象,一个用于 C 对象。

但是类 A 在类 X 之外没有任何意义:A 是类 X 对象的类型属性所必需的。 B 类和 C 类的同上。

愿意 想要 创造 > 一个 工厂 用于 对象 属于 一个 没有 链接 这个 工厂 工厂 X X级 特别是 禁止 召唤 这个 factoryA 外部 来自 the factoryX (因为调用这个 FactoryA NOT 来创建类 X 的对象绝对没有意义,没有意义,因为 A 在我的项目中只是一种类型X 类的属性)。

我想禁止在 FactoryX 类之外注入 FactoryAImpl 实例,但我现在找不到解决方案。

如果 创建 一个 工厂 A 可能 链接 绝对 X ? 如果 是, 如何 如果 不是, 哪个 设计 图案 可以使用

提前谢谢你,

托马斯

【问题讨论】:

    标签: java spring design-patterns factory-pattern


    【解决方案1】:

    如果要禁止 FactoryA 在 FactoryX 之外实例化,请将其封装到 package-private。

    class FactoryA{ // don't use public modifier so it only be accessed from the same package.
        FactoryA(){ } // don't use public modifier, so it only be instantiated from class in the same package
    }
    

    确保将 FactoryA 和 FactoryX 放在同一个包目录中。

    【讨论】:

    • 非常感谢 Ferry。正如您所说,我将为 FactoryX 及其所有子工厂创建一个专用包。非常感谢我的朋友。
    猜你喜欢
    • 2016-03-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多