目录
一、概念
适配器模式是将一个类的接口转换为客户希望的另外一个接口,适配器模式由于接口不兼容而不能一起工作的那些类可以一起工作。
oo设计原则:①面向接口编程(面向抽象编程)②封装变化③多用组合、少用继承④对修改关闭、对扩展开放
(图片中间的即为Adapter)
二、示例
原来的代码:PowerA接口在work()函数中正常工作。
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
PowerA powerA = new PowerAImpl();
work(powerA);
}
public static void work(PowerA a) {
a.insert();
}
}
interface PowerA{
public void insert();
}
class PowerAImpl implements PowerA{
@Override
public void insert() {
// TODO Auto-generated method stub
System.out.println("A开始工作");
}
}
现在新增了一个PowerB接口,想要将PowerB往work()函数传。
interface PowerB{
public void connect();
}
class PowerBImpl implements PowerB{
@Override
public void connect() {
// TODO Auto-generated method stub
System.out.println("B开始工作");
}
}
我们不可以直接传PowerB接口。
PowerB powerB = new PowerBImpl();
work(powerB);
现在需要适配器(Adapter)将B转换为A。
class Adapter implements PowerA{
private PowerB powerB;
public Adapter(PowerB powerB) {
this.powerB = powerB;
}
@Override
public void insert() {
// TODO Auto-generated method stub
powerB.connect();
}
}
最后main函数里的写法。
PowerB powerB = new PowerBImpl();
Adapter adapter = new Adapter(powerB);
work(adapter);
或者
/*适配器*/
abstract class AnimalFunction{
public void sing() {}
public void cry() {}
public void run() {}
public void swim() {}
}
class Dog extends AnimalFunction{
@Override
public void run() {
System.out.println("跑");
}
}
先写一个适配器(抽象)专门用于被继承,再写具体的实现类。