首页 > 解决方案 > 如何写子工厂链接到他们的总工厂(避免这些子工厂链接到另一个工厂)?

问题描述

我使用 Spring Framework 用 Ja​​va 编程。但我有一个关于设计模式的问题。

我有一个 X 类,有 3 个部分,3 个“大”部分:A B 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 类的同上。

不想 A对象创建一个工厂而不 将该工厂链接Factory XX 特别禁止factoryX 外部调用factoryA 因为调用FactoryA NOT 来创建 X 类的对象绝对没有意义,没有意义,因为 A 在我的项目中只是 X 类属性的一种类型)。

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

如果 A创建 工厂是否可以X绝对链接 _ _ 如果是,请问如何如果没有,可以使用哪种设计模式

先感谢您,

托马斯

标签: javaspringdesign-patternsfactory-pattern

解决方案


如果您想禁止 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 放在同一个包目录中。


推荐阅读