java - 如何写子工厂链接到他们的总工厂(避免这些子工厂链接到另一个工厂)?
问题描述
我使用 Spring Framework 用 Java 编程。但我有一个关于设计模式的问题。
我有一个 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 X类X ,特别是禁止从factoryX 外部调用此factoryA (因为调用此FactoryA NOT 来创建 X 类的对象绝对没有意义,没有意义,因为 A 在我的项目中只是 X 类属性的一种类型)。
我想禁止在 FactoryX 类之外注入 FactoryAImpl 实例,但我现在找不到解决方案。
如果 我 为A类创建 工厂,是否可以将它与X类绝对链接? _ _ 如果是,请问如何?如果没有,我可以使用哪种设计模式?
先感谢您,
托马斯
解决方案
如果您想禁止 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 放在同一个包目录中。
推荐阅读
- mongodb - mongodb 的每个分片是否对一个集群中的其他分片不可见?
- flutter - 嵌套的 ListView 不可见 - Flutter
- python - matplotlib 中不寻常的条形图
- odoo - 如何在odoo13中仅从pos源位置加载产品
- asp.net-mvc - 托管服务器中的内存不足异常
- java - 我们可以在浏览器中发出一个包含多个标头作为 URL 的 GET API 调用请求吗
- c# - 如何在 ASP.NET MVC 中将条带支付与自定义表单集成?
- javascript - 有没有办法从后端自动渲染项目?
- jenkins - 在 Jenkins 中启用永久禁用的项目
- c# - 将 float[] 转换为 byte[] 的最快方法是什么?