Можешь привести пример использования паттерна проектирования 'Фабрика' в Android фреймворке?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
// Абстрактный класс или интерфейс продукта
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-разметки или других параметров.