簡體   English   中英

“一次性使用方法” - 看起來更好,但更難閱讀?

[英]“One-time use methods” - looks better, but harder to read?

對於一個非常復雜的對象,我有一個構造函數,有很多設置要做。

很多這樣的設置包括將偵聽器添加到這個中的其他對象,所以我的構造函數充滿了樣板匿名內部類方法描述。 而且由於你需要全部實現它們,即使你不想使用它們,它們也會占用大量的空間。 例:

     myTag.addMouseListener(new MouseListener()
     {

        public void mouseUp(MouseEvent e)
        {
          // do nothing
        }

        public void mouseDown(MouseEvent e)
        {
           myTag.setListVisible(true);
        }

        public void mouseDoubleClick(MouseEvent e)
        {
           // do nothing
        }
     });

它只是一大堆沒什么(是的,我知道格式也很難看,但這是我們團隊的風格,沒有必要爭論)。

我通過為這些一次性操作創建方法,例如,為這個丑陋設置一個綁帶

addEventListeners()

和那樣的東西。 但我覺得這些方法與方法應該是什么相反:模塊化和可重用的代碼,你可以做到通用。 相反,我有這些特定的一次性方法只存在,因為我不想讓他們的身體內聯。

你如何處理這種情況? 我知道在這種情況下所有的樣板材都是必要的惡魔,但是我把它全部放在我的構造函數中,這是它曾經需要的唯一的地方,或者我把它分解成只用過一次的方法存在隱藏丑陋的代碼段落?

編輯:要清楚,我的例子只是很多樣板代碼的症狀。 我現在肯定在使用適配器(感謝您的建議!)但我的問題最終是關於將一​​些長而繁忙的構造函數中的代碼分解成零碎是否有意義,即使它們僅使用一次並且不服務模塊化的目的,而不是從大構造函數中移出代碼,使其更具可讀性。

您可以嘗試將這些事情視為服務。 使用您需要的服務。 en.wikipedia.org/wiki/Service_layers_pattern

您可以使用多種設計模式使其更加實用。

觀察者設計模式是一個良好的開端。 在此輸入圖像描述

在這個問題中,這也是一個很好的方法: 鼠標交互的設計模式

為了避免這種類型的問題,Swing引入了Adapters ,它是偵聽器的空實現。 而不是

 myTag.addMouseListener(new MouseListener()
 {

    public void mouseUp(MouseEvent e)
    {
      // do nothing
    }

    public void mouseDown(MouseEvent e)
    {
       myTag.setListVisible(true);
    }

    public void mouseDoubleClick(MouseEvent e)
    {
       // do nothing
    }
 });

你可以簡單地使用

 myTag.addMouseListener(new MouseAdapter()
 {

    //override only method you need
    public void mouseDown(MouseEvent e)
    {
       myTag.setListVisible(true);
    }

 });

BTW適配器可以實現許多類似的接口,例如MouseAdapter它是MouseListenerMouseWheelListenerMouseMotionListener空實現


如果你想知道一個長方法與幾個短方法相比是否更好,即使它們只在一個地方使用,我也會選擇很少的短路,只是因為它更容易閱讀你的代碼正確命名的方法。 此外(對許多人來說非常重要)較小的方法更容易測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM