Adapter模式

适配器模式,又称包装器(wrapper)模式,顾名思义,就是将类进行包装,然后适应新的需求,书中举的例子比较恰当,就是用电脑的电源转换器来举例子,书中举得例子是打印的例子:

1,target:

要实现的目标,就是电源能够正常的工作

2,adapter

转换器,将220V的电压转换为10v可工作的电压

3,current

现状,220v电压

实现的思路有两个,一个是继承,另外一个是委托

先说第一种方法,继承:

思路:adapter要继承current类,这样才可以获取当前的方法,同时,要实现target接口,这样我们可以通过新建一个用adapter实现target的接口。

代码如下

target

package ModelAdapter;

public interface Printer {
    public abstract void printWeak(String str);
    public abstract void printBold(String str);
}
target

adapter

package ModelAdapter;

public class PrintBaner extends Baner implements Printer{

    public void printWeak(String str) {
        showWeak(str);
    }

    public void printBold(String str) {
        showBold(str);
    }

}
adapter

current

package ModelAdapter;

public class Baner {
    public void showWeak(String str){
        System.out.println("("+str+")");
    }
    public void showBold(String str){
        System.out.println("******"+str+"**********");
    }
}
current

测试方法main类

package ModelAdapter;

public class Main {

    public static void main(String[] args) {
        Printer p = new PrintBaner();
        p.printBold("hello, world");
        p.printWeak("who are you?");
    }

}
main

这里采用的是新建的接口为adapter实现的接口,这样实际调用的方法就是适配器的方法

第二种方案就是使用委托

什么是委托呢?顾名思义,就是根据将操作委托给别人来实行,这里,就是将target的操作委托给current进行操作,具体的如下

此时的adapter就是一个委托,具体的代码如下

package ModelAdapter;

public class PrintDelegete implements Printer {
    private Baner baner;
    public void printWeak(String str) {
        baner.showWeak(str);
    }

    public void printBold(String str) {
        baner.showBold(str);
    }

}
adapter delegate

上面就是适配器模式。

 

posted @ 2015-03-20 23:02  凝荷  阅读(171)  评论(0编辑  收藏  举报