论坛首页 Java企业应用论坛

了解适配器模式

浏览 10603 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-14   最后修改:2008-12-14
我的认识是适配器模式 其实就是一个补救的模式。适配对象应该是接口,功能让是两个原本不能通讯的接口进行通讯。
其实就是现实生活中的翻译。 个人的肤浅认识。所以LZ例子中抓住类的实现去说明适配器也许会让人费解,说明白适配器只要抓住需要适配的两个接口就可以了。因为你需要适配的不一定是两个JAVA类 也有可能是 一个XML片段,一个BYTE数组等。
0 请登录后投票
   发表时间:2008-12-16  
yunhaifeiwu 写道
wuwanli0228 写道
你好我是初学者也是才在这个网站上注册的。我想问下Makecake m=new Makecake();然后就可以调用下面的方法了。m.makeBread();
m.makeCake();是不是用子类对象就是父类对象实现的?我是初学者,请回复下。讲的越明白越好。



你说的这个m.makeCake(),楼主的例子中好像没有这个方法。对于你的提问也就莫名奇妙了。

 public class MakeCake extends MakeBread implements MakeFactory {  
     public String getCake() {  
         System.out.println("++++++cake++++");  
         return "cake";  
     };  
} 


MakeFactory 接口有两种方法  getBread 和 getCake.
上面代码中MakeCake类实现了MakeFactory 接口。要实现一个接口,则必须全部实现接口的方法。

在MakeCake类中,显示实现了getCake方法。而getBread 方法,是由MakeCake的父类(即MakeBread )中的getBread 方法隐示实现。

也就是说,楼主用了继承与接口实现了适配器。但是正如我前面所说的,这种方式是一种不太好的方式,至少会影响对设计模式的深入理解。同时也违反了设计模式的原则,如果不是特殊情况下,这种方式少用为妙。如果是学设计模式,应掌握通过对象注入的实现方式。

==================================================================

下面是给你的参考建议:
1  认真阅读java面向对象的基本概念。弄清继承、接口、对象的含义。在你的提问中,反映出在这些方面还欠缺一些。
2  对于设计模式,你应掌点掌握适配器模式。但楼主这种方式,你只能了解即可。我前面介绍了适配器模式的另一种方式。姑且叫对象注入吧。
3 强调:对象注入要认真研究揣磨。什么访问者模式、命令模式、职责链模式、组合模式、观察者模式等,从实现角度上看,基本可分成:对象注入+数据结构。事实上"对象注入+数据结构"能弄出千变万化的模式出来。

以上是个人观点,仅供参考。


那是我按照楼主的意思自己在myeclipse里边写了个。其实makeCake(),在楼主的代码里是getCake,mackeBread是楼主的getBread其实我明白了是运用了类的运行时多态性是吧?谢谢楼上的哥们的建议。做了几个项目后发现基础的那些不经常用的都忘了。呵呵。见笑
0 请登录后投票
   发表时间:2008-12-16  
独孤求学 写道
运行机制有点看不明白, 还望解释下

清楚点说。
定义了接口,接口里边有定义个方法供下边实现类实现,(我不太了解适配器模式,不知道为什么作者会写2个方法,我试过写一个方法getCake()就可以。)然后定义了MakeBread定义了getBread方法。再写一个类实MakeFactory接口并继承了MakeBread类。
后边Client实现类里边的
public static void main(String[] args) {  
       MakeCake m = new MakeCake();  //创建子类对象
      m.getCake();                   //调用了子类自己的方法
       m.getBread();                 //子类对象既是父类对象,用到了运行时多态的特性。调用了父类的方法;
}
不太熟悉设计模式只能从入门级别给你说下。。如果不对还望指点;
0 请登录后投票
   发表时间:2008-12-17  
看了后,获益匪浅,谢谢楼主的分享
0 请登录后投票
   发表时间:2009-01-20  
wuwanli0228 写道
独孤求学 写道
运行机制有点看不明白, 还望解释下

清楚点说。
定义了接口,接口里边有定义个方法供下边实现类实现,(我不太了解适配器模式,不知道为什么作者会写2个方法,我试过写一个方法getCake()就可以。)然后定义了MakeBread定义了getBread方法。再写一个类实MakeFactory接口并继承了MakeBread类。
后边Client实现类里边的
public static void main(String[] args) {  
       MakeCake m = new MakeCake();  //创建子类对象
      m.getCake();                   //调用了子类自己的方法
       m.getBread();                 //子类对象既是父类对象,用到了运行时多态的特性。调用了父类的方法;
}
不太熟悉设计模式只能从入门级别给你说下。。如果不对还望指点;


晕死!你对类继承和多态的概念都没搞清楚嘛!子类继承父类,并不是“子类对象既是父类对象”,而是父类中的非private成员变量和方法都给了子类,子类自己可以调用他们。再说一下多态,子类重写继承自父类的方法或者定义父类中申明的abstract方法才是多态的表现!
0 请登录后投票
   发表时间:2009-04-20  
个人觉得,实际上方法重载的复用,也是一种适配方式。
0 请登录后投票
   发表时间:2009-06-04   最后修改:2009-06-14
看了回复,收获不少....
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics