Java设计模式--适配模式
Java设计模式--适配器模式
什么是设计模式(Design Pattern)?
设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。
适配器模式的定义?
适配器模式是将一个类的接口,转换成客户期望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
适配器模式实现方式?
使用组合方式实现:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被适配者。
2.使用继承方式实现:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配。
适配器模式的作用:
1.透明:通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单,更直接,更紧凑。
2.重用:复用了现存的类,解决了现存类和复用环境要求不一致的问题。
3.低耦合:将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原代码,(遵循开闭原则)。
适配器模式实例:
1.首先创建一个目标接口
1 /**
2 * 目标接口类(三相插座接口)
3 * @author Administrator
4 *
5 */
6 public interface ThreePlugIf {
7 //目标方法(使用三相电流供电)
8 public void powerWhitThree();
9 }
2.创建一个原有类,也就是不匹配类
1 /**
2 * 原始类,不匹配类
3 * @author Administrator
4 *
5 */
6 public class GBTwoPlug {
7
8 //使用二相电流供电
9 public void powerWithTwo(){
10 System.out.println("使用二相电流供电");
11 }
12 }
3.创建客户端,规定适配类
/**
* 客户端类,明确使用三相插头
* @author Administrator
*
*/
public class NoteBook {
private ThreePlugIf plug;
//创建构造方法,明确使用三相插头
public NoteBook(ThreePlugIf plug) {
this.plug = plug;
}
//使用三相插座充电
public void charge(){
plug.powerWhitThree();
}
}
4.创建组合适配器
1 /**
2 * 适配器,把二相插头转换成三相插头
3 * @author Administrator
4 *
5 */
6 public class TwoPlugAdapter implements ThreePlugIf {
7 //需要转换的类
8 private GBTwoPlug twoPlug;
9
10 public TwoPlugAdapter(GBTwoPlug twoPlug) {
11 this.twoPlug = twoPlug;
12 }
13 @Override
14 public void powerWhitThree() {
15 System.out.println("通过转换");
16 twoPlug.powerWithTwo();
17 }
18
19 }
5.组合适配器测试类
1 public class Test {
2
3 public static void main(String[] args) {
4 GBTwoPlug twoPlug = new GBTwoPlug();
5 //需要使用适配器把二相的转换成三相的
6 ThreePlugIf threePlug = new TwoPlugAdapter(twoPlug);
7 NoteBook noteBook = new NoteBook(threePlug);
8 noteBook.charge();
9 }
10
11 }
6.创建继承适配器
1 /**
2 * 采用继承方式的插座适配器
3 * @author Administrator
4 *
5 */
6 public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf {
7
8 @Override
9 public void powerWhitThree() {
10 System.out.println("借助继承适配器");
11 //使用继承父类中的方法
12 this.powerWithTwo();
13
14 }
15
16 }
7.继承适配器测试类
1 public class Test1 {
2
3 public static void main(String[] args) {
4 //创建继承测试类
5 ThreePlugIf threePlug = new TwoPlugAdapterExtends();
6 NoteBook noteBook = new NoteBook(threePlug);
7 noteBook.charge();
8 }
9
10 }