java—如何编写链接到通用工厂的子工厂(避免这些子工厂链接到其他工厂)?

8fsztsew  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(366)

我用java和spring框架编程。但是我有一个关于设计模式的问题。
我有一个x类有3个部分,3个“大”部分:a b c

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

我为这个类创建了一个工厂,用3个大privates方法来构造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;
    }

}

问题是:由于createa、createb和createc三个私有方法都是大方法,工厂实现类非常大。
一种解决方案是创建3个“子组件”并将这3个子组件注入到类factoryx中,一个用于类a对象,一个用于类b对象,一个用于c对象。
但是类a在类x之外没有任何意义:a是类x对象的类型属性。等同于b级和c级。
我不想为类a的对象创建一个Factory,除非将这个Factory链接到FactoryX类,特别是将这个factorya的调用从FactoryX中移除(因为调用这个factorya不是为了创建类x的对象完全没有意义,因为在我的项目中,a只是类x属性的一种类型)。
我想禁止在factoryx类的外部注入factoryaimpl示例,但是我现在找不到解决方案。
如果为ClassA创建一个工厂,是否可以将它与ClassX?Ifies联系起来?如果不是,请怎么做?如果不是,可以使用哪种设计模式?
先谢谢你,
托马斯

s71maibg

s71maibg1#

如果要禁止在factoryx之外示例化factorya,请将其封装为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放在同一个包目录中。

相关问题