主题:Adapter模式(Object Adapter)

Adapter模式使原本由于接口不兼容而不能在一起工作的类可以一起工作,即为一个内容合适但接口不匹配的对象创建一个新的接口.Adapter模式让现存的对象适应新的类结构,而不受他们的接口限制.

例如现在,我们有一个球袋类BasketballBag负责完成装入篮球。

Java代码

 

  1. public class BasketballBag{   
  2.     public void putBasketball(){   
  3.         System.out.println("Put in BasketBall....");   
  4.     }   
  5. }  

 

public class BasketballBag{ public void putBasketball(){ System.out.println("Put in BasketBall...."); }}

有一个专门负责装入操作的类的方法putBalls()来调用BasketballBag类中方法来放入篮球。

Java代码

 

  1. public class PutBall{   
  2.     public void putBalls(BasketballBag bb){   
  3.         bb.putBasketball();   
  4.     }   
  5. }  

 

public class PutBall{ public void putBalls(BasketballBag bb){ bb.putBasketball(); }}

此时我们有一个足球类FootballBag负责装入完成装入足球。

Java代码

 

  1. public class FootballBag{   
  2.     public void putFootball(){   
  3.         System.out.println("Put in FootBall....");   
  4.     }   
  5. }  

 

public class FootballBag{ public void putFootball(){ System.out.println("Put in FootBall...."); }}

前面提到的类中的方法putBalls()用来调用BaskballBag中的方法来放入篮球,我们能不能使用同一个方法来放入足球呢?我们试一试

Java代码

 

  1. public class Main {   
  2.     public static void main(String[] args){   
  3.         PutBall pb = new PutBall();   
  4.            
  5.         System.out.println("BasketBall");   
  6.         BasketballBag bb = new BasketballBag();   
  7.         pb.putBalls(bb);   
  8.            
  9.         System.out.println("FootBall")   
  10.         FootballBag fb = new FootballBag();   
  11.         pb.putBalls(fb);   
  12.     }   
  13.   
  14. }  

 

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); }}

运行报错,告诉我们参数类型不匹配。在上述程序中,如何使用

Java代码

 

  1. FootballBag fb = new FootballBag();   
  2. pb.putBalls(fb);  

 

FootballBag fb = new FootballBag();pb.putBalls(fb);

来执行呢?

那我们可以考虑使用一种办法是的pb.putBalls(fb) 中的 fb 参数类型能够和函数需要的类型相匹配。我们可以考虑让单独使用一个新的类,让他继承BasketballBag,并且加入扩展功能(调用/实例 FootballBag)。

Java代码

 

  1. public class BallBag extends BasketballBag{   
  2.     FootballBag fb;   
  3.     public BallBag(FootballBag fb){   
  4.         this.fb = fb;   
  5.     }   
  6.     public void putFootballs(){   
  7.         fb.putFootball();   
  8.     }   
  9. }   

 

public class BallBag extends BasketballBag{ FootballBag fb; public BallBag(FootballBag fb){ this.fb = fb; } public void putFootballs(){ fb.putFootball(); }}

类写好了,感觉不错,看看调试情况,修改一下刚刚的 Main类

Java代码

 

  1. public class Main {   
  2.     public static void main(String[] args){   
  3.         PutBall pb = new PutBall();   
  4.            
  5.         System.out.println("BasketBall");   
  6.         BasketballBag bb = new BasketballBag();   
  7.         pb.putBalls(bb);   
  8.            
  9.         System.out.println("FootBall")   
  10.         FootballBag fb = new FootballBag();   
  11.         BallBag bbag = new BallBag(fb);   
  12.         pb.putBalls(fb);   
  13.     }   
  14.   
  15. }  

 

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模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值