锁定老帖子 主题:了解适配器模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-14
最后修改:2008-12-14
我的认识是适配器模式 其实就是一个补救的模式。适配对象应该是接口,功能让是两个原本不能通讯的接口进行通讯。
其实就是现实生活中的翻译。 个人的肤浅认识。所以LZ例子中抓住类的实现去说明适配器也许会让人费解,说明白适配器只要抓住需要适配的两个接口就可以了。因为你需要适配的不一定是两个JAVA类 也有可能是 一个XML片段,一个BYTE数组等。 |
|
返回顶楼 | |
发表时间: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其实我明白了是运用了类的运行时多态性是吧?谢谢楼上的哥们的建议。做了几个项目后发现基础的那些不经常用的都忘了。呵呵。见笑 |
|
返回顶楼 | |
发表时间:2008-12-16
独孤求学 写道 运行机制有点看不明白, 还望解释下
清楚点说。 定义了接口,接口里边有定义个方法供下边实现类实现,(我不太了解适配器模式,不知道为什么作者会写2个方法,我试过写一个方法getCake()就可以。)然后定义了MakeBread定义了getBread方法。再写一个类实MakeFactory接口并继承了MakeBread类。 后边Client实现类里边的 public static void main(String[] args) { MakeCake m = new MakeCake(); //创建子类对象 m.getCake(); //调用了子类自己的方法 m.getBread(); //子类对象既是父类对象,用到了运行时多态的特性。调用了父类的方法; } 不太熟悉设计模式只能从入门级别给你说下。。如果不对还望指点; |
|
返回顶楼 | |
发表时间:2008-12-17
看了后,获益匪浅,谢谢楼主的分享
|
|
返回顶楼 | |
发表时间: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方法才是多态的表现! |
|
返回顶楼 | |
发表时间:2009-04-20
个人觉得,实际上方法重载的复用,也是一种适配方式。
|
|
返回顶楼 | |
发表时间:2009-06-04
最后修改:2009-06-14
看了回复,收获不少....
|
|
返回顶楼 | |