Можешь привести пример использования паттерна проектирования 'Фабрика' в Android фреймворке?

Приведенный пример иллюстрирует использование паттерна Фабрика для создания различных типов TextView.

Короткий ответ

Что ответить на собеседовании

Приведенный пример иллюстрирует использование паттерна Фабрика для создания различных типов TextView. Абстрактная фабрика TextViewFactory определяет метод createTextView, а конкретные фабрики StandardTextViewFactory и BoldTextViewFactory реализуют создание конкретных типов TextView (StandardTextView и BoldTextView соответственно). Это позволяет коду, который использует фабрики, быть независимым от конкретных реализаций TextView.

Подробный разбор

Ответ с пояснениями

// Абстрактный класс или интерфейс продукта
interface TextView {
    void setText(String text);
    void setTextColor(int color);
}

// Конкретный класс продукта для стандартного TextView
class StandardTextView implements TextView {
    android.widget.TextView internalTextView;

    StandardTextView(android.content.Context context) {
        internalTextView = new android.widget.TextView(context);
    }

    @Override
    public void setText(String text) {
        internalTextView.setText(text);
    }

    @Override
    public void setTextColor(int color) {
        internalTextView.setTextColor(color);
    }
}

// Конкретный класс продукта для Bold TextView
class BoldTextView implements TextView {
    android.widget.TextView internalTextView;

    BoldTextView(android.content.Context context) {
        internalTextView = new android.widget.TextView(context);
        internalTextView.setTypeface(null, android.graphics.Typeface.BOLD);
    }

    @Override
    public void setText(String text) {
        internalTextView.setText(text);
    }

    @Override
    public void setTextColor(int color) {
        internalTextView.setTextColor(color);
    }
}

// Абстрактный класс фабрики
abstract class TextViewFactory {
    abstract TextView createTextView(android.content.Context context);
}

// Конкретная фабрика для стандартного TextView
class StandardTextViewFactory extends TextViewFactory {
    @Override
    TextView createTextView(android.content.Context context) {
        return new StandardTextView(context);
    }
}

// Конкретная фабрика для Bold TextView
class BoldTextViewFactory extends TextViewFactory {
    @Override
    TextView createTextView(android.content.Context context) {
        return new BoldTextView(context);
    }
}

// Пример использования в Activity
class MyActivity extends androidx.appcompat.app.AppCompatActivity {

    @Override
    protected void onCreate(android.os.Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ...

        TextViewFactory standardFactory = new StandardTextViewFactory();
        TextView standardTextView = standardFactory.createTextView(this);
        standardTextView.setText("Привет, мир!");

        TextViewFactory boldFactory = new BoldTextViewFactory();
        TextView boldTextView = boldFactory.createTextView(this);
        boldTextView.setText("Жирный текст");

        // Добавление в layout
        android.widget.LinearLayout linearLayout = new android.widget.LinearLayout(this);
        linearLayout.setOrientation(android.widget.LinearLayout.VERTICAL);
        linearLayout.addView(((StandardTextView) standardTextView).internalTextView);
        linearLayout.addView(((BoldTextView) boldTextView).internalTextView);
        setContentView(linearLayout);
    }
}

Приведенный пример иллюстрирует использование паттерна Фабрика для создания различных типов TextView. Абстрактная фабрика TextViewFactory определяет метод createTextView, а конкретные фабрики StandardTextViewFactory и BoldTextViewFactory реализуют создание конкретных типов TextView (StandardTextView и BoldTextView соответственно). Это позволяет коду, который использует фабрики, быть независимым от конкретных реализаций TextView.

В контексте Android фреймворка, паттерн Фабрика часто проявляется в классах, которые создают другие объекты с различными конфигурациями или реализациями в зависимости от контекста или параметров. Например, система может использовать внутренние фабрики для создания различных типов ViewGroup или Drawable в зависимости от XML-разметки или других параметров.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку