1. 适配器模式
如果接口中的方法较多,而使用接口的时候却只关心其中的一个或者几个方法(关心的方法较少),
如果采用常规手段,就需要对每个方法都加以实现。可以创建一个类型来实现接口,对不关心的方法进行
空实现,对关心的方法保持不变。定义的新类继承抽象类后,将所关心的方法加以实现即可。
此种模式就称为适配器模式。常用于UI设计中的按钮点击事件的处理中。
--作业练习:
使用抽象类和接口实现适配器模式设计。涉及的类和接口分别为ButtonListener(接口),
其中含有click() / dbclick() / keyUp() / keyDown()等方法。
ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现。
Button类中添加addListener(ButtonListener l)方法。
//按钮监听器接口
interface ButtonListener {
public void onClick(); //单击事件
public void onDbclick(); //双击事件
public void onKeyDown(); //按键按下
public void onKeyUp(); //按键释放
}
//按钮监听器适配器
abstract class ButtonAdapter implements ButtonListener {
public void onDbclick(){}
public void onKeyUp(){}
public void onKeyDown(){}
}
//继承适配器
class MyListener extends ButtonAdapter {
public void onClick() {
System.out.println("i click one !");
}
}
//
class YourListener extends ButtonAdapter {
public void onClick() {
System.out.println("you click one !");
}
}
//按钮
class Button {
//按钮的监听器
private ButtonListener listener;
// 添加监听器
public void addListener(ButtonListener lsn) {
this.listener = lsn;
}
// 模拟单击事件
public void click() {
// 处理单击事件
listener.onClick();
}
// 模拟双击事件
public void dbClick() {
listener.onDbclick();
}
}
//测试类
class AdapterDemo {
public static void main(String[] args) {
//button1
Button btn1 = new Button();
MyListener l = new MyListener();
btn1.addListener(l);
btn1.click();
//button2
Button btn2 = new Button();
YourListener yl = new YourListener();
btn2.addListener(yl);
btn2.click();
}
}
2. 多态
多种形态。某一类事物的多种存在形态。
对继承的类来讲,使用父类类型引用子类的对象。
对于接口来说,可以使用接口引用实现了该接口的类所创建的对象。
为什么函数可以覆盖,而属性不能覆盖?属性是资产,容纳数据的地方,函数是行为,不容纳和存储数据,所以函数可以被覆盖,而属性不能。