我最近遇到了一些使用抽象類作爲接口的例子,但也將工廠構造函數添加到抽象接口,因此它可以在某種意義上被「新」化。例如:帶工廠構造函數的抽象類的好處?
這項服務的abstract class WidgetService {
factory WidgetService() = ConcreteWidgetService;
Widget getWidget();
void saveWidget(Widget widget);
}
class ConcreteWidgetService extends BaseWidgetService implements WidgetService {
WidgetService();
Widget getWidget() {
// code to get widget here
}
void saveWidget(Widget widget) {
// code to save widget here
}
}
用法將在其他一些服務或組件,像這樣:
WidgetService _service = new WidgetService();
根據我的這個樣本的理解,線以上將基本上是「新」了WidgetService通常會產生來自Dart分析器的警告,並且根據將ConcreateWidgetService分配給WidgetService的工廠構造函數,該服務變量實際上將是ConcreateWidgetService的一個實例。
這種方法有什麼好處嗎?從我的OOP經驗來看,當我不知道具體類型時,我使用抽象類/接口來編程。在這裏,我們似乎將具體類型立即分配給抽象工廠構造函數。我想我的第二個問題是在這個例子中,爲什麼不直接在這裏使用ConcreteWidgetService而不是重複所有的方法簽名?