java interface
Привет всем.
у меня такой вопрос.
есть интерфейс:
public interface TestInterface {}
есть два класса, которые его имплементируют:
public class A implements TestInterface{
public A(BigInteger value){
System.out.println("This is A");
}
}
public class B implements TestInterface{
public B(BigDecimal value){
System.out.println("This is B");
}
}
Нужно что бы в зависимости от параметра (тут BigInteger и BigDecimal) создавался конкретный объект.
Что то типа TestInterface ti = new TestInterface(BigInteger bi){}
Это возможно сделать? если да то как?
Я не знаю, на сколько могут отличаться классы А от В, но чисто по описанию я бы реализовал через Generic.
кстати тоже хороший способ. Но у меня будет не только A и B. У меня будет A,B,C,D,E классы.
А вообще мне идея с интерфейсом не очень нравится, тк все классы имеют свои методы, которые в других классах не существуют. Но это идея бетроера. Завтра буду говорить с ним по этому поводу
Я поговорил сегодня с Бетроером. Он против dependency injection, говорит что это может повлиять на всю систему. И ему подходит вариант с factory. Но мне не нравится то, что интерфейс будет содержать все методы из всех классов. Например класс A должен будет реализовать методы, которые ему не нужны, а нужны классу B.
У Бетроера что очередная параноя на базе ДИ?
https://msdn.microsoft.com/en-us/library/aa288059(v=vs.71)...
Как может номер "привязанный" к классу развалить систему и где он там ДИ увидел? В спецочках наверное.
Не, если очень постарться то можно всё сделать, но это надо сильно стараться
Но мне не нравится то, что интерфейс будет содержать все методы из всех классов
Нафига? Интерфес общий, а имплементации различные.
Если нужно в интерфейс выкидывать все методы, то необходимо срочно искать другого Бетроера.
получается, что класс A и B содержат ненужные методы, тк эти методы в интерфейсе. Классам же на верху (SomethingA, SomethingB) нужны только определенные методы. Но эти классы должны знать только интерфейс.
Есть какое-то разумное решение у этой проблемы?
Ps uml набросал на коленке. Извиняюсь за качество
Тогда, как вариант: пишете еще одну архитектуру классов, т.е. интерфейс и реализации для "параметров", вроде IParameters, ParameterA, ParameterB,... Тогда в методе do для классов A,B,C,...будет один аргумент типа IParam, ну а каждая из реализаций будет использовать свою реализацию параметров ParameterA,...
Я если честно уже не уверен, что мне делать
Если не уверены, то нужно делать как шеф хочет, только чтобы было в письменной форме, без всяких вариантов - "а Вы меня не так поняли"
По идее он хочет абстрактную фабрику классов.
https://refactoring.guru/ru/design-patterns/abstract-facto...
https://en.wikipedia.org/wiki/Factory_method_pattern
http://www.oodesign.com/factory-method-pattern.html
методы могут быть разные с разными параметрами.
Понятно... архитектура от того же "Бетроера"
Тогда самое простое, как уже написали: добавляем промежуточный класс/интерфейс для списка параметров. И его пользуем вместо списка различных параметров.