程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

编写优雅的点击处理程序

发布于2021-08-23 22:49     阅读(1175)     评论(0)     点赞(11)     收藏(1)


我们通常通过以下方式(方式 1在按钮(在 GWT 或 Swing 或 Android 中)上编写点击处理程序

class A {

    public void myMethod() {

        int count = 0 ;

        Button myButton = new Button("x");
        myButton.addClickHandler(new ClickHandler() {
          public void onClick(ClickEvent event) {
              count = 1 ;
          }

        });

    }
}

但是,我们也可以为点击处理程序编写一个不同的类,并像下面那样实现它(方式 2):

class A implements ButtonClickInterface {

    int count ;
    public void myMethod() {

        count = 0 ;

        Button myButton = new Button("x");
        myButton.addClickHandler(new MyClickHander(this));

    }

    @Override
    public void buttonClicked() {
        count = 1 ;        
    }
}

interface ButtonClickInterface {
    public void buttonClicked() ;
}

class MyClickHandler implements ClickHandler {


    ButtonClickInterface buttonClickInterface ;

    public MyClickHandler(ButtonClickInterface buttonClickInterface) {
        this.buttonClickInterface = buttonClickInterface ;
    }

    @Override
    public void onClick(ClickEvent event) {
        buttonClickInterface.buttonClicked() ;         
    }

}

在这里,我必须将其count作为类变量。这有什么缺点吗?上面的实现方式是否还有其他的弊端?我实现 ClickHandler 的两种方式如何在复杂性、耦合、创建的对象数量和代码可读性方面相互对抗?


解决方案


您的第二个解决方案太复杂了。

我经常在 Android 上这样做(伪代码):

class A implements OnClickListener {

    onCreate() {
        myButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.myButtonId:
                // do something
                break;
            // more cases
            default: 
                Log.w(LOG_TAG, "not implemented");
        }
    }
}


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/273481/9b306f52c49d166e9e94/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

11 0
收藏该文
已收藏

评论内容:(最多支持255个字符)