1. 什么时候要使用适配器模式?
在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中使用,但是新的环境要求的接口是这些现存环境所不满足的。那么如何应对这种”迁移的变化呢?“此时就要用到适配器模式。
2. 什么是适配器模式?
适配器模式的类图(对象适配):
3. 类适配器模式
package 类适配器模式;
//用户期待的接口
interface Target {
void MyOutput();
}
//原有接口
interface Adaptee {
void Output();
}
//实现类1
class ConcreteAdaptee implements Adaptee {
public void Output() {
System.out.println("From ConcreteAdaptee");
}
}
//实现类2
class ConcreteAdaptee2 implements Adaptee {
public void Output() {
System.out.println("From ConcreteAdaptee2");
}
}
//实现类1的适配器
class ConcreteAdapter extends ConcreteAdaptee implements Target {
public void MyOutput() // 适配
{
this.Output();
}
}
//实现类2的适配器
class ConcreteAdapter2 extends ConcreteAdaptee2 implements Target {
public void MyOutput() {
this.Output();
}
}
public class Client {
public static void main(String[] args) {
Target target = new ConcreteAdapter();
target.MyOutput();
Target target2 = new ConcreteAdapter2();
target2.MyOutput();
}
}
不足就是对多个实现类要定义多个适配器
4. 对象适配器模式
package 对象适配器模式;
//用户期待的接口
interface Target {
void MyOutput();
}
//原有接口
interface Adaptee {
void Output();
}
//实现类1
class ConcreteAdaptee implements Adaptee {
public void Output() {
System.out.println("From ConcreteAdaptee");
}
}
//实现类2
class ConcreteAdaptee2 implements Adaptee {
public void Output() {
System.out.println("From ConcreteAdaptee2");
}
}
//适配器 而且适配器可以适配多个接口
class Adapter implements Target
{
private Adaptee adaptee; // 必须要维护一个Adaptee类型的成员变量
public Adapter(Adaptee adaptee)
{
this.adaptee = adaptee;
}
public void MyOutput()
{
this.adaptee.Output();
}
}
public class Client {
public static void main(String[] args) {
//原来的接口 通过适配器 就成为现在用户需要的接口
Target target = new Adapter(new ConcreteAdaptee());
target.MyOutput();
target = new Adapter(new ConcreteAdaptee2());
target.MyOutput();
}
}
5. .Net中的适配器模式