Q:

Получить два разных объекта (либо один тип, либо второй) от метода

При реализации принципа MVC в Java столкнулся с необходимостью получения от одного из классов (объекта, его метода) Model объекта либо одного (1), либо второго (2) типа.(1) и (2) абсолютно разные типы. Создание объектов (1) либо (2) происходит в классе Model в зависимости от результата анализа и обработки переданных ему данных.

A:

Есть несколько способов решения указанной вами проблемы:
1) Возвращать некую обертку вокруг объекта type1 и type2, типа:
class MyWrapper
{
    private Type1 myType1;
    private Type2 myType2;
}

Это скорее в стиле C, чем в стиле Java. В стиле Java подойдет второй способ:
2) Возвращать общий интерфейс, например MyReturnable
class Type1 implements MyReturnable {}
class Type2 implements MyReturnable {}

3) Самый идеальный конечно вариант когда оба ваших типа имеют одного и того же предка MyType, который вы и будете возвращать:
class Type1 extends MyType {}
class Type2 extends MyType {}

A:

вариант 1:
public class TF extends JFrame implements Configurable, Testable {

    private CommonInterface common = null;

    // создаем "общий" интерфейс - контейнер
    public TF() {
        // create new common instance
        common = new CommonInterface() {
            @Override
            public Configurable getConfigurable() {
                return TF.this;
            }

            @Override
            public Testable getTestable() {
                return TF.this;
            }
        };

        // использование
        configure(getCommon().getConfigurable());
        test(getCommon().getTestable());
    }

    // возвращаем интерфейс доступа к другим интерфейсам
    public CommonInterface getCommon() {
        return common;
    }

    // методы которые работают с отдельными интерфейсами
    private void test(Testable testable) {
        testable.doTest();
    }

    private void configure(Configurable configurable) {
        configurable.doChange();
    }

    // имплементация (в данном примере наш класс сам выступает контейнером функционала для остальных)
    @Override
    public void doChange() {
        System.out.println("change");
    }

    @Override
    public void doTest() {
        System.out.println("test");
    }
}

interface CommonInterface {
    Configurable getConfigurable();

    Testable getTestable();
}

interface Configurable {
    public void doChange();
}

interface Testable {
    public void doTest();
}

вариант 2:
public class TF extends JFrame implements CommonInterface {

    // использование
    public TF() {
        configure(getCommon());
        test(getCommon());
    }

    // методы которые используют разные интерфейсы одного и того же обьекта
    private void test(Testable c) {
        c.doTest();
    }

    private void configure(Configurable c) {
        c.doChange();
    }

    // метод который возвращает ссылку сразу на 2 интерфейса
    // в данном примере оставлен только для наглядности    
    public CommonInterface getCommon() {
        return this;
    }

    // имплементация. в принципе она могла быть в других обьектах
    @Override
    public void doChange() {
        System.out.println("change");
    }

    @Override
    public void doTest() {
        System.out.println("test");
    }
}

interface CommonInterface extends Configurable, Testable {
}

interface Configurable {
    public void doChange();
}

interface Testable {
    public void doTest();
}

