适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
在软件开发中,系统的数据和行为都正确,但是接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。
1、Target类
public class Target
{
public void Request()
{
System.out.println("普通请求");
}
}
2、Adaptee类
public class Adaptee
{
public void specificRequest()
{
System.out.println("特殊请求");
}
}
3、
Adapter类
public class Adapter extends Target
{
private Adaptee adaptee=new Adaptee();
public void Request()
{
adaptee.specificRequest();
}
}
4、Client客户端类
public class Client
{
public static void main(String[] args)
{
Target target=new Adapter();
target.Request();
}
}
实例一:ccc是中国人,在NBA打中锋,刚开始不懂英文,需要一个中间翻译,这个翻译就是适配器。
1、抽象类Player
public abstract class Player
{
protected String name;
public Player(String name)
{
this.name=name;
}
public abstract void attack();
public abstract void defense();
}
2、Forwards前锋
public class Forwards extends Player
{
public Forwards(String name)
{
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack()
{
// TODO Auto-generated method stub
System.out.println("前锋"+name+"进攻");
}
@Override
public void defense()
{
// TODO Auto-generated method stub
System.out.println("前锋"+name+"防守");
}
}
3、ForeignCenter类
public class ForeignCenter
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public void 进攻()
{
// TODO Auto-generated method stub
System.out.println("中锋"+name+"进攻");
}
public void 防守()
{
// TODO Auto-generated method stub
System.out.println("中锋"+name+"防守");
}
}
4、Translator翻译
public class Translator extends Player
{
private ForeignCenter fc=new ForeignCenter();
public Translator(String name)
{
super(name);
fc.setName("ccc");
// TODO Auto-generated constructor stub
}
@Override
public void attack()
{
// TODO Auto-generated method stub
fc.进攻();
}
@Override
public void defense()
{
// TODO Auto-generated method stub
fc.防守();
}
}
5、Guards类
public class Guards extends Player
{
public Guards(String name)
{
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack()
{
// TODO Auto-generated method stub
System.out.println("后卫"+name+"进攻");
}
@Override
public void defense()
{
// TODO Auto-generated method stub
System.out.println("后卫"+name+"进攻");
}
}
6、客户端程序
public class Client
{
public static void main(String[] args)
{
Player a=new Forwards("aaa");
a.attack();
Player b=new Guards("bbb");
b.attack();
Player c=new Translator("ccc");
c.attack();
c.defense();
}
}