Adapter模式使原本由于接口不兼容而不能在一起工作的类可以一起工作,即为一个内容合适但接口不匹配的对象创建一个新的接口.Adapter模式让现存的对象适应新的类结构,而不受他们的接口限制.
例如现在,我们有一个球袋类BasketballBag负责完成装入篮球。
- public class BasketballBag{
- public void putBasketball(){
- System.out.println("Put in BasketBall....");
- }
- }
public class BasketballBag{ public void putBasketball(){ System.out.println("Put in BasketBall...."); }}
有一个专门负责装入操作的类的方法putBalls()来调用BasketballBag类中方法来放入篮球。
- public class PutBall{
- public void putBalls(BasketballBag bb){
- bb.putBasketball();
- }
- }
public class PutBall{ public void putBalls(BasketballBag bb){ bb.putBasketball(); }}
此时我们有一个足球类FootballBag负责装入完成装入足球。
- public class FootballBag{
- public void putFootball(){
- System.out.println("Put in FootBall....");
- }
- }
public class FootballBag{ public void putFootball(){ System.out.println("Put in FootBall...."); }}
前面提到的类中的方法putBalls()用来调用BaskballBag中的方法来放入篮球,我们能不能使用同一个方法来放入足球呢?我们试一试
- public class Main {
- public static void main(String[] args){
- PutBall pb = new PutBall();
- System.out.println("BasketBall");
- BasketballBag bb = new BasketballBag();
- pb.putBalls(bb);
- System.out.println("FootBall")
- FootballBag fb = new FootballBag();
- pb.putBalls(fb);
- }
- }
public class Main { public static void main(String[] args){ PutBall pb = new PutBall(); System.out.println("BasketBall"); BasketballBag bb = new BasketballBag(); pb.putBalls(bb); System.out.println("FootBall") FootballBag fb = new FootballBag(); pb.putBalls(fb); }}
运行报错,告诉我们参数类型不匹配。在上述程序中,如何使用
- FootballBag fb = new FootballBag();
- pb.putBalls(fb);
FootballBag fb = new FootballBag();pb.putBalls(fb);
来执行呢?
那我们可以考虑使用一种办法是的pb.putBalls(fb) 中的 fb 参数类型能够和函数需要的类型相匹配。我们可以考虑让单独使用一个新的类,让他继承BasketballBag,并且加入扩展功能(调用/实例 FootballBag)。
- public class BallBag extends BasketballBag{
- FootballBag fb;
- public BallBag(FootballBag fb){
- this.fb = fb;
- }
- public void putFootballs(){
- fb.putFootball();
- }
- }
public class BallBag extends BasketballBag{ FootballBag fb; public BallBag(FootballBag fb){ this.fb = fb; } public void putFootballs(){ fb.putFootball(); }}
类写好了,感觉不错,看看调试情况,修改一下刚刚的 Main类
- public class Main {
- public static void main(String[] args){
- PutBall pb = new PutBall();
- System.out.println("BasketBall");
- BasketballBag bb = new BasketballBag();
- pb.putBalls(bb);
- System.out.println("FootBall")
- FootballBag fb = new FootballBag();
- BallBag bbag = new BallBag(fb);
- pb.putBalls(fb);
- }
- }
public class Main { public static void main(String[] args){ PutBall pb = new PutBall(); System.out.println("BasketBall"); BasketballBag bb = new BasketballBag(); pb.putBalls(bb); System.out.println("FootBall") FootballBag fb = new FootballBag(); BallBag bbag = new BallBag(fb); pb.putBalls(fb); }}
ok,测试通过。通过这个例子,我们得到一种把接口不兼容的类混合在一起使用的方法,而这种方法可以被称作Adapter模式。