您的位置:首页 > 其它

设计模式学习(六) ------- 适配器与外观

2009-07-18 16:08 232 查看
适配器模式:

经常碰到当你需要使用某个类时, 发现它的接口不符合你的要求,比如你要一只鸭子,但是手上只有火鸡,那怎么办?

你可以说写个新的Duck class , 但是现实是不能创建新的类的,所以我们需要想个办法使火鸡来代替鸭子

how??

适配器help us , 它使Turky能够作用

首先我们写个

public class TurkyDuck implements Duck{

private Turky turky;

public void setTurky(Turky turky){

this.turky = turky;

}

@Override

public void qurk(){

turky.bell();

}

public void dkfj(){

turky.eirio();

}

}

You now see the Point , did you?

we can use the TurkyDuck class to fit the need by use the method of the Turky

通过实现Target接口,调用被适配的接口的方法,来实现Target接口的方法,偷天换日!!!

这里Target是Duck

被适配的是Turky

这种适配方式也被称作对象适配器

还有一种适配方式是,类适配器,需要多重继承,即继承Duck和Turky(Java中不行)

当然这两种适配方式,各有优缺

对象适配器: 首先它是组合方式加入了被适配的对象,因此灵活性配高,还可以适配被适配对象的子类

当然弹性更好

类适配: 他不需要实现Target接口的每个方法,只需要一个适配器类(对象适配需要两个:适配器类和被适配类)

总之,适配器将客户与接口的实现解耦,客户并不了解适配的过程,并不知道其实是被适配类在工作,同时适配器可以包含多个被适配的类一起工作。

适配器与装饰的区别:

适配器是间接的改变被适配接口的类型,使其看上去符合Target接口而被调用工作——仅仅是重写(用被适配类的方法,实现Target接口)

装饰是对Target进行包装而使其增加功能——(这是扩展)

外观模式:

有时候为了实现某个任务,我们需要调用多个对象的多个方法,十分的繁琐,比如你想使用家庭影院看电影,你要打开电源,打开DVD,放入片子,调好声音 等等

是想你每次要看就要重复上面的动作,如果上面涉及了10个对象,20个方法,要写100行,难道每次都去写吗,肯定不是的,肯定是不合理的

其实,现实中coding肯定已经用到了外观模式,就是简化

碰到上面的问题,我们一般会写个方法,将所有的操作封装起来,下次只要调用这个方法就可以了,这就是外观的一种应用(我觉得)

当然更正式 的外观模式,是指你写个单独的类Theater,写个单独的方法封装上面的一系列操作,当然对于家庭影院的其他操作写可以写方法封装起来

总之,客户只要一个Theater的对象,就可以了,而不需要与什么10个小对象耦合

这里我们可以看到OO设计原则的影子

OO原则——最少朋友(Least Friend)

可以解释为: 每个类尽量少的与其他类耦合在一起

一般来说,对于对象的使用有这么几个条件:

方法中可以使用传进来的对象

使用方法中new 的对象

使用类的实例变量

对象本身

其他的对象最好不要用(如System.out.println(""));

你可以看到这里就耦合了PrintOutStream 当然为了方便可以这么做,

但是不提倡,因为这样增加了维护的困难

总结一下:

装饰——扩展

适配——改变接口

外观——简化

这是三种相似模式的目的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: