我用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联系起来?如果不是,请怎么做?如果不是,可以使用哪种设计模式?
先谢谢你,
托马斯
1条答案
按热度按时间s71maibg1#
如果要禁止在factoryx之外示例化factorya,请将其封装为package private。
确保将factorya和factoryx放在同一个包目录中。