سؤال

أنا مهتم جدًا باستخدام نمط العرض السلبي لتحسين قابلية الاختبار، لكنني لست متأكدًا من كيفية استدعاء مربعات الحوار الفرعية.

هل لديك طريقة عرض الأصل لإنشاء طريقة عرض فرعية وإرجاع واجهة إلى وحدة التحكم الأصلية، ثم اطلب من وحدة التحكم الأصلية إنشاء وحدة تحكم الطفل؟

هل كانت مفيدة؟

المحلول

لقد كنت أفكر في هذا الأمر كثيرًا وأعتقد أن لدي بعض الحلول الممكنة.

  1. أضف طريقة إلى فئة العرض لإنشاء مربع حوار تابع
  2. إنشاء مصنع يقوم بإنشاء النموذج وعرضه.ووحدة التحكم في مربع الحوار التابع

طريقة 1

class ParentView extends JDialog implements IParentView {
  public IChildView newChildView(...) {
    return new ChildView(...);
  }
  // ...
}

interface IParentView {
  IChildView newChildView(...);
  // ...
}

class ParentController {
  private IParentView view;
  public ParentController(IParentView view) {
    this.view  = view;
  }

  public void showChildView() {
    IChildView childView = view.newChildView();
    ChildController childController = new ChildController(childView);
    childView.setVisible(true);
  }
}

class ChildView extends JDialog implements IChildView {
  // ...
}

interface IChildView {
  void setVisible(boolean visible);
}

class ChildController {
  private IChildView view;
  public ChildController(IChildView view) {
    this.view = view;
  }
}

الطريقة 2

// During testing, create a mock ChildFactory and assign it to instance
class ChildFactory implements IChildFactory {
    private static IChildFactory instance;
    public static ChildFactory getInstance() {
      if (instance == null) {
        instance = new ChildFactory();
      }
      return instance;
    }
    public static void setInstance(IChildFactory factory) {
      instance = factory;
    }
    public void createChild(IParentView parent) {
      IChildView view = new ChildView(parent);
      ChildController controller = new ChildController(view);
      view.setVisible(true);
    }
}

interface IChildFactory {
  void createChild(IParentView parent);
}

class ParentController {
  private IParentView view;
  public ParentController(IParentView view) {
    this.view  = view;
  }
  public void showChildView() {
    ChildFactory.getInstance().createChild(view);
  }
}

// ParentView class similar to method 1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top