适配器模式

来源:互联网 发布:linux移动文件命令 编辑:程序博客网 时间:2024/06/05 03:39
类的适配器模式
假如需要使用程序中现有的某个类,且该类的接口不符合需求,但该类已经实现好了,为了不影响原有程序,不便对该类本身修改,这时可以用一个新的类继承原来的类,然后在新的类中去重载原来类的某些方法或添加一些新的方法。代码如下:
原有的类:
public class Person {  
    private String name;  
    private String sex;  
    private int age;  
    public void speakMyJapanese(){  
        System.out.println("I can speak Japanese!");  
    }  
    public void speakMyEnglish(){  
        System.out.println("I can speak English!");  
    } 
}
适配器接口:
public interface Job { 
    public abstract void speakJapanese();  
    public abstract void speakEnglish();  
    public abstract void speakFrench();  
适配器:
public class Adapter extends Person implements Job{  
    public void speakJapanese() { 
    ....
    speakMyJapanese();
    .... 
    }   
    public void speakEnglish() { 
    ....  
    speakMyEnglish();
    ....
    }  
    public void speakFrench() { 
    ....  
    }  
}  

对象的适配器模式
不再继承原来的类,而是把原来的类作为新类的一个成员变量,这样可以通过该成员变量调用原来的方法,下面只给出适配器的代码:
public class Adapter implements Job {  
    Person person;  
    public Adapter(Person person) {  
        this.person = person;  
    }  
    public void speakEnglish() {  
        person.speakEnglish();  
    }  
    public void speakJapanese() {  
        person.speakJapanese();  
    }  
    //new add  
    public void speakFrench() {  
    ... 
    }  
}  

类适配器与对象适配器比较
类的适配模式用于单一源的适配(一个类只能继承一个父类),由于它的源的单一,代码实现不用写选择逻辑,很清晰;而对象的适配模式则可用于多源的适配(可以包含多个类类型的成员变量),弥补了类适配模式的不足,使得原本用类适配模式需要写很多适配器(一个源类对应一个适配器)的情况不复存在,弱点是,由于源的数目可以较多,所以具体的实现条件选择分支比较多,不太清晰。












0 0
原创粉丝点击