博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缺省适配模式
阅读量:6693 次
发布时间:2019-06-25

本文共 1997 字,大约阅读时间需要 6 分钟。

    如果一个类只希望实现接口中的部分方法,这时就可以考虑使用缺省适配模式。新建一个抽象类实现接口,空实现接口中所有的方法,新的类继承该抽象类,覆盖希望实现的方法即可。

    以AWT中的常用的监听器为例,希望给Frame加上一个WindowListener,frame.addWindowListener()的参数是new WindowListener(),也就是可以像下面这样写代码:

frame.addWindowListener(new WindowListener(){		@Override		public void windowActivated(WindowEvent e) {			// TODO Auto-generated method stub					}		@Override		public void windowClosed(WindowEvent e) {			// TODO Auto-generated method stub					}		@Override		public void windowClosing(WindowEvent e) {			// TODO Auto-generated method stub					}		@Override		public void windowDeactivated(WindowEvent e) {			// TODO Auto-generated method stub					}		@Override		public void windowDeiconified(WindowEvent e) {			// TODO Auto-generated method stub					}		@Override		public void windowIconified(WindowEvent e) {			// TODO Auto-generated method stub					}		@Override		public void windowOpened(WindowEvent e) {			// TODO Auto-generated method stub					}    	      });

  如果只是想重写windowClosing方法,上面的写法会显得很冗余,而且别人都知道再什么。

      给Frame加上一个WindowListener,正确的方法如下:   

frame.addWindowListener( new WindowAdapter()     {         public void windowClosing(WindowEvent e)         {           System.exit(0);         }       });

  可以看WindowAdapter的源码,所有的实现都是空实现:    

public abstract class WindowAdapter    implements WindowListener, WindowStateListener, WindowFocusListener{       public void windowOpened(WindowEvent e) {}    public void windowClosing(WindowEvent e) {}    public void windowClosed(WindowEvent e) {}    public void windowIconified(WindowEvent e) {}    public void windowDeiconified(WindowEvent e) {}    public void windowActivated(WindowEvent e) {}    public void windowDeactivated(WindowEvent e) {}    public void windowStateChanged(WindowEvent e) {}    public void windowGainedFocus(WindowEvent e) {}    public void windowLostFocus(WindowEvent e) {}}

  上面就是缺省适配模式的一个很好的例子。

     AWT中有很多使用缺省适配模式的实例,如下所示:

      

       鲁智深是和尚,但是却不吃斋,念经,打坐,撞钟。如果是直接继承自和尚这个接口,那鲁智深就不是和尚了。可以让抽象类天星继承和尚接口,鲁智深作为天星的子类即可。

      

     

转载于:https://www.cnblogs.com/lnlvinso/p/3840406.html

你可能感兴趣的文章
微软和谷歌警告投资者:糟糕的 AI 会损害他们的品牌
查看>>
成为数据科学家有哪些好处
查看>>
ArrayList 源码解析
查看>>
CodeMaid v11.0 发布,开源 Visual Studio 扩展
查看>>
前端重构之路(组件化)
查看>>
如何避开采购黑幕 高效透明地进行招投标管理?
查看>>
[20180628]expdp与rows=n.txt
查看>>
鱼鹰软件签约医学传播企业麦迪卫康
查看>>
解决ESXI不支持USB移动硬盘
查看>>
js中的事件委托详解
查看>>
区块链智能合约是什么?
查看>>
redis持久化快速回忆手册
查看>>
周庆钢:大数据驱动企业管理与营销决策
查看>>
js读取cookie信息
查看>>
Android第三方开源FloatingActionButton(com.getbase.floatingactionbutton): FloatingActionsMenu【3】...
查看>>
Python3—— collections模块
查看>>
WebLogic口令猜解工具【Python脚本】
查看>>
消灭天价药,AI会成为新药神吗?
查看>>
[增删改查] 使用 React 做后台管理 CRUD 界面和 RESTful 交互
查看>>
springboot demo
查看>>