java设计模式之适配器设计模式

来源:互联网 发布:全民淘宝客能挣钱吗 编辑:程序博客网 时间:2024/05/17 08:12
适配器模式分为三种情况,分别是类的适配器设计模式、对象的适配器设计模式、接口的适配器设计模式
第一种:类的适配器模式
核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,
通过Adapter类,将Source的功能扩展到Targetable里
设计步骤:
第一步:创建Button类,提供一个方法onClick待适配
第二步:创建接口OnClickListener,在接口中定义onclick方法(该方法和Button类中的方法一样),再创建一个新的方法onLongTimeClick
第三步:定义ButtonAdapter类,继承Button,实现OnClickListener接口,在ButtonAdapter类中将onLongTimeClick做实现
具体编码实现:
创建Button类,提供一个方法onClick待适配:
/**
* 创建Button类,提供一个方法onClick待适配
*
* @author zdliu
*
*/
public class Button {
public void onClick() {
System.out.println("按钮的点击事件...");
}
}
创建接口OnClickListener,在接口中定义onclick方法(该方法和Button类中的方法一样),再创建一个新的方法onLongTimeClick
/**
* 创建接口OnClickListener,在接口中定义onclick方法(该方法和Button类中的方法一样),
* 再创建一个新的方法onLongTimeClick
*
* @author zdliu
*
*/
public interface OnClickListener {
/**
* 资源类中的方法
*/
public void onClick();

/**
* 新的方法
*/
public void onLongTimeClick();
}
定义ButtonAdapter类,继承Button,实现OnClickListener接口,在ButtonAdapter类中将onLongTimeClick做实现
/**
* 定义ButtonAdapter类,继承Button,实现OnClickListener接口,
* 在ButtonAdapter类中将onLongTimeClick做实现
*
* @author zdliu
*
*/
public class ButtonAdapter extends Button implements OnClickListener {

@Override
public void onLongTimeClick() {
System.out.println("适配后的按钮的长点击事件...");

}

}
测试类:
public class Test {
public static void main(String[] args) {
new ButtonAdapter().onClick();
new ButtonAdapter().onLongTimeClick();
}

}
控制台输出信息:
按钮的点击事件...
适配后的按钮的长点击事件...
***************************************************************************************************
第二种:对象的适配器设计模式
基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题
设计思路:
第一步:创建Button类,提供一个方法onClick待适配
第二步:创建接口OnClickListener,在接口中定义onclick方法(该方法和Button类中的方法一样),再创建一个新的方法onLongTimeClick
第三步:定义ButtonAdapter类,实现OnClickListener接口,在ButtonAdapter类的构造中持有Button类的实例,通过实例直接调用onclick方法,并将onLongTimeClick做实现
具体编码实现:
创建Button类,提供一个方法onClick待适配:
/**
* 创建Button类,提供一个方法onClick待适配
*
* @author zdliu
*
*/
public class Button {
public void onClick() {
System.out.println("按钮的点击事件");
}
}
创建接口OnClickListener,在接口中定义onclick方法(该方法和Button类中的方法一样),再创建一个新的方法onLongTimeClick:
/**
* 创建接口OnClickListener,在接口中定义onclick方法(该方法和Button类中的方法一样),
* 再创建一个新的方法onLongTimeClick
*
* @author zdliu
*
*/
public interface OnClickListener {
/**
* 资源类中的方法
*/
public void onclick();

/**
* 新的方法
*/
public void onLongTimeClick();
}
定义ButtonAdapter类,实现OnClickListener接口,在ButtonAdapter类的构造中持有Button类的实例,通过实例直接调用onclick方法,并将onLongTimeClick做实现:
/**
* 定义ButtonAdapter类,实现OnClickListener接口,在ButtonAdapter类的构造中持有Button类的实例,通过实例直接
* 调用onclick方法,并将onLongTimeClick做实现
*
* @author zdliu
*
*/
public class ButtonAdapter implements OnClickListener {
private Button button;

public ButtonAdapter(Button button) {
this.button = button;
}

@Override
public void onclick() {
button.onClick();

}

@Override
public void onLongTimeClick() {
System.out.println("适配后的按钮的长点击事件...");

}

}
测试类:
public class Test {
public static void main(String[] args) {
Button button = new Button();
new ButtonAdapter(button).onclick();
new ButtonAdapter(button).onLongTimeClick();
}

}
控制台输出信息:
按钮的点击事件
适配后的按钮的长点击事件...
***************************************************************************************************
第三种:接口的适配器设计模式
接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一类,继承该抽象类,重写我们需要的方法就行。
设计思路:
第一步:定义一个接口OnClickListener,在接口中提供方法onClick和onLongTimeClick
第二步:定义抽象类ClickListener,实现OnClickListener接口,将接口中的方法做空实现
第三步:定义Button类,继承ClickListener,具体的实现其中的方法onClick和onLongTimeClick
第四步:定义ImageView类,继承ClickListener,具体的实现其中的方法onClick
第五步:定义LongTimeClick类,继承ClickListener,具体的实现其中的方法onLongTimeClick
具体代码实现:
定义一个接口OnClickListener,在接口中提供方法onClick和onLongTimeClick
/**
* 定义一个接口OnClickListener,在接口中提供方法onClick和onLongTimeClick
*
* @author zdliu
*
*/
public interface OnClickListener {
/**
* 普通点击事件
*/
public void onClick();

/**
* 长点击事件
*/
public void onLongTimeClick();

}
定义抽象类ClickListener,实现OnClickListener接口,将接口中的方法做空实现
/**
* 定义抽象类ClickListener,实现OnClickListener接口,将接口中的方法做空实现
*
* @author zdliu
*
*/
public abstract class ClickListener implements OnClickListener {

@Override
public void onClick() {
// TODO Auto-generated method stub

}

@Override
public void onLongTimeClick() {
// TODO Auto-generated method stub

}

}
定义Button类,继承ClickListener,具体的实现其中的方法onClick和onLongTimeClick
/**
* 定义Button类,继承ClickListener,具体的实现其中的方法onClick和onLongTimeClick
*
* @author zdliu
*
*/
public class Button extends ClickListener {

@Override
public void onClick() {
System.out.println("按钮的普通点击事件");
super.onClick();
}

@Override
public void onLongTimeClick() {
System.out.println("按钮的长点击事件");
super.onLongTimeClick();
}

}
定义ImageView类,继承ClickListener,具体的实现其中的方法onClick
/**
* 定义ImageView类,继承ClickListener,具体的实现其中的方法onClick
*
* @author zdliu
*
*/
public class ImageView extends ClickListener {

@Override
public void onClick() {
System.out.println("图片的点击事件");
super.onClick();
}

}
定义LongTimeClick类,继承ClickListener,具体的实现其中的方法onLongTimeClick
/**
* 定义LongTimeClick类,继承ClickListener,具体的实现其中的方法onLongTimeClick
*
* @author zdliu
*
*/
public class LongTimeClick extends ClickListener {

@Override
public void onLongTimeClick() {
System.out.println("长点击事件的实现");
super.onLongTimeClick();
}

}
测试类:
public class Test {
public static void main(String[] args) {
new Button().onClick();
new Button().onLongTimeClick();
new ImageView().onClick();
new LongTimeClick().onLongTimeClick();
}
}
控制台输出信息:
按钮的普通点击事件
按钮的长点击事件
图片的点击事件
长点击事件的实现

关注微信公众号 java刘振东或者搜索java-lzd获取更多内容

0 0
原创粉丝点击