设计模式_13:适配器模式

来源:互联网 发布:linq去除重复数据 编辑:程序博客网 时间:2024/06/10 00:40

有4个角色:美国人、英国人、中国人、中译英的翻译官,让美、英、中三人分别说一句英语,假设中国人不会说英语(即没有实现说英语的接口),那么他就只能依靠翻译官来帮忙了:

public class Main {    public static void main(String[] args) {        IEnglish american = new American();        IEnglish englishman = new Englishman();        IEnglish transistor = new Transistor(new Chinese());        american.speakEnglish();        englishman.speakEnglish();        transistor.speakEnglish();    }}//目标接口targetinterface IEnglish {    void speakEnglish();}//美国人class American implements IEnglish{    @Override    public void speakEnglish() {        System.out.println("American speak English");    }}//英国人class Englishman implements IEnglish{    @Override    public void speakEnglish() {        System.out.println("Englishman speak English");    }}//中国人(被适配者Adaptee)class Chinese {    public void speak(){        System.out.println("Chinese speak English");    }}//翻译官(适配者Adapter)class Transistor implements IEnglish{    private Chinese chinese;    public Transistor(Chinese chinese) {        this.chinese = chinese;    }    @Override    public void speakEnglish() {        chinese.speak();    }}

运行结果:

American speak EnglishEnglishman speak EnglishChinese speak English


在这个例子中,中国人是被适配对象(adaptee),而翻译官是适配对象(adapter),他和外国人都实现了IEnglish接口,专门用来解决国人不会说英语的问题。


适配器模式主要是在一些类不允许或不容易修改时使用,比如方法名称不同、实现不同等情况,但这些最好是在软件开发初期就立即把他们改好,而不是优先套用适配器模式


原创粉丝点击