浏览 3935 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-05
例如现在,我们有一个球袋类BasketballBag负责完成装入篮球。 public class BasketballBag{ public void putBasketball(){ System.out.println("Put in BasketBall...."); } } 有一个专门负责装入操作的类的方法putBalls()来调用BasketballBag类中方法来放入篮球。 public class PutBall{ public void putBalls(BasketballBag bb){ bb.putBasketball(); } } 此时我们有一个足球类FootballBag负责装入完成装入足球。 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); } } 运行报错,告诉我们参数类型不匹配。在上述程序中,如何使用 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(); } } 类写好了,感觉不错,看看调试情况,修改一下刚刚的 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); } } ok,测试通过。通过这个例子,我们得到一种把接口不兼容的类混合在一起使用的方法,而这种方法可以被称作Adapter模式。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-05
It's the Object Adapter.
Class Adapter need to be demo. What's more, I think there's a problem with the last paragraph. 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(bbag); //shouldn't be fb , in my opinion. } } And the BallBag class override the putBasketball() fuction. class BallBag extends BasketballBag { FootballBag fb; public BallBag(FootballBag fb) { this.fb = fb; } public void putBasketball() //It will be better if the name is "putBall" { fb.putFootball(); } } upwards is my understanding. I'm beginner of pattern. Talk about it together. |
|
返回顶楼 | |
发表时间:2008-05-05
Ok。No problem,next demo is class adapter.
|
|
返回顶楼 | |
发表时间:2008-05-05
Ozone 写道 Ok。No problem,next demo is class adapter.
pls see my update. |
|
返回顶楼 | |
发表时间:2008-05-05
In your opinion bbag don't equal to fb ? I think ,BallBag is a help object,which have equal BallBag with BasketballBag.
|
|
返回顶楼 | |
发表时间:2008-11-20
最后修改:2008-11-20
楼主举的例子能测试通过?在BallBag的putBaseketBall方法中要调用putFootball。
|
|
返回顶楼 | |
发表时间:2008-11-21
LZ的例子测试过吗?
|
|
返回顶楼 | |