Fork me on GitHub

java设计模式之适配器模式

  说到适配器,我们可能会想到电脑的适配器,没错,其实作用是一样的,电脑的适配器在中国可以使用,在美国也可以使用,它的主要作用是在新接口和老接口之间进行适配。。这就是一个适配的过程,适配器模式的类图如下:

  这个类图是我在其他的地方截到的,我以前觉的类图特别不好看,慢慢接触之后发现类图和流程图都特别有意义,一看就特别的清晰。整个流程就是通过AdapterAdaptee转换为目标(Target)的子类。既然已经知道原理了,那下面开始码代码吧。我来举例一个场景吧,经常需要使用到投影仪,但是有一些人的电脑并不支持投影仪的大口,只能使用适配器了。那就是可以把小口转换为大口。

 

package com.roc.adapter;
/**
 * 投影仪支持的大口
 * @author liaowp
 *
 */
public interface BigPort {
    
    public void userBigPort();//使用的大口
}

 

package com.roc.adapter;
/**
 * 电脑的小口
 * @author liaowp
 *
 */
public interface SmallPort {
    public void userSmallPort();//使用小口
}
package com.roc.adapter;
/**
 * 适配器模式
 * @author liaowp
 *
 */
public class SmallToBig implements BigPort{

    private SmallPort smallPort;//小口
    
    public SmallToBig(SmallPort smallPort){//获得小口
        this.smallPort=smallPort;
    }

    public void userBigPort() {
        this.smallPort.userSmallPort();    //使用小口
    }
            
}
package com.roc.adapter;
/**
 * 客户端
 * @author liaowp
 *
 */
public class Client {

    public static void main(String[] args) {
        SmallPort smallPort = new SmallPort() {//电脑自带小口
            public void userSmallPort() {
                System.out.println("使用的是电脑小口");
            }
        };
        //需要一个大口才可以投影,小口转换为大口
        BigPort bigPort=new SmallToBig(smallPort);
        bigPort.userBigPort();//电脑小口工作中    实现了适配
    }    
}

下面说一下适配器的优缺点:

优点:

1、将目标类和适配者类解耦

2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性

3、灵活性和扩展性都非常好,符合开闭原则

类适配器还有的优点:

1、由于适配器类是适配者类的子类,因此可以再适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

类适配器的缺点:

1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。

对象适配器还有的优点:

1、把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。

对象适配器的缺点:

1、与类适配器模式相比,要想置换适配者类的方法就不容易。

适配器模式与代理模式的区别:

适配器模式

    是把2个不同的东西转换到可以正常使用,适配器是去迎合目标对象与源对象。

代理模式

    是2个对象都有相同的功能,2者接口是一样的。

 

posted @ 2016-07-21 20:26  鹏&鹏  阅读(7443)  评论(0编辑  收藏  举报