Я создал класс, который создает различные экземпляры. Это как фабрика. Поскольку я знаю, что заводский класс является singleton или создает экземпляр как статический метод. , но мой класс - образец прототипа весны. он имеет переменную-член. также есть методы, чтобы вызвать последовательность установить переменную-член после каждого вызова методов.Заводский класс должен быть одноточечным или статическим методом?
Я хочу знать, в этом случае, как это сделать. Вы могли бы порекомендовать лучший способ или хорошее название?
Я работаю на Spring Framework и Java 8 ..
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class FruiteFactory {
private String type;
@Setter
private Integer field; // set alfter call appleSupplier
public FruiteFactory(String type) {
Assert.notNull(type) ;
this .type = type ;
}
public < T> T create(Class<T > clazz) {
Object result;
if (clazz == Apple.class) {
result = appleSupplier.get();
} else if (clazz == Banana. class) {
result = bananaSupplier.get();
} else {
throw new IllegalArgumentException();
}
return (T) result;
}
private Supplier<Apple> appleSupplier =() -> {
Apple apple = new Apple();
// ...
return apple;
};
private Supplier<Banana> bananaSupplier =() -> {
Banana banana = new Banana();
banana.setField(field);
return banana;
};
}
@Service
public class FruiteService {
@Autowired ApplicationContext context;
public void buy(String type) {
FruiteFactory fruiteFactory = context.getBean(FruiteFactory.class, type);
Apple apple = fruiteFactory.create(Apple.class);
// save the apple
Integer no = apple.getNo();
fruiteFactory.setField(no);
Banana banana = fruiteFactory.create(Banana.class);
// ....
}
}
Заводской шаблон никогда не налагает завод на однотонный – Dici