对象适配器简单来说就是目标类通过持有一个被适配的类的对象,来完成改造,让目标类的功能最终符合需求。
基于上一节的示例和说明,我们在本节直接演示对象适配器。
1、被适配抽象业务类IHandleA
package com.itzhimei.study.design.adapter.objectadapter;
/**
* @Auther: www.itzhimei.com
* @Description: 被适配业务类A
*/
public interface IHandleA {
/**
* 业务方法a1
*/
void a1();
/**
* 业务方法a2
*/
void a2();
/**
* 业务方法c
*/
void c();
}
2、被适配实现业务类HandleA
package com.itzhimei.study.design.adapter.objectadapter;
/**
* @Auther: www.itzhimei.com
* @Description:
*/
public class HandleA implements IHandleA {
@Override
public void a1() {
System.out.println("执行HandleA的a1方法");
}
@Override
public void a2() {
System.out.println("执行HandleA的a2方法");
}
@Override
public void c() {
System.out.println("执行HandleA的c方法");
}
}
3、目标抽象业务类IHandleB
package com.itzhimei.study.design.adapter.objectadapter;
/**
* @Auther: www.itzhimei.com
* @Description: 目标业务类B
*/
public interface IHandleB {
/**
* 业务方法b1
*/
void b1();
/**
* 业务方法b2
*/
void b2();
/**
* 业务方法c
*/
void c();
}
4、目标实现业务类HandleB
package com.itzhimei.study.design.adapter.objectadapter;
/**
* @Auther: www.itzhimei.com
* @Description:
*/
public class HandleB implements IHandleB {
private IHandleA handleA;
public HandleB(IHandleA handleA) {
this.handleA = handleA;
}
@Override
public void b1() {
this.handleA.a1();
System.out.println("HandleA的a1方法不满足需求,进行扩展和改造,执行HandleB的b1方法");
}
@Override
public void b2() {
System.out.println("HandleA的a2方法不满足需求,进行扩展和改造,执行HandleB的b2方法");
}
@Override
public void c() {
this.handleA.c();
}
}
重点在这里:
这里的HandleB,没有像类的适配器去继承HandleA,是在HandleB自己内部持有一个HandleA的成员属性,然后在HandleB自己的各个方法中调用HandleA这个成员属性的方法,来即拥有的HandleA的功能,同时也能根据HandleB自己的需要在各个b方法中进行改造或重写逻辑。
5、测试
package com.itzhimei.study.design.adapter.objectadapter;
/**
* @Auther: www.itzhimei.com
* @Description: 对象的适配器--测试
*/
public class Client {
public static void main(String[] args) {
//被适配对象
IHandleA handleA = new HandleA();
//适配后的对象
IHandleB handleB = new HandleB(handleA);
System.out.println("-----------b1方法执行结果-----------");
handleB.b1();
System.out.println("-----------b2方法执行结果-----------");
handleB.b2();
System.out.println("-----------c方法执行结果-----------");
handleB.c();
}
}
输出:
-----------b1方法执行结果-----------
执行HandleA的a1方法
HandleA的a1方法不满足需求,进行扩展和改造,执行HandleB的b1方法
-----------b2方法执行结果-----------
HandleA的a2方法不满足需求,进行扩展和改造,执行HandleB的b2方法
-----------c方法执行结果-----------
执行HandleA的c方法
以上就是对象适配器模式的实现。
对象适配器的类结构图: