设计模式之适配器模式

设计模式之适配器模式

什么是适配器模式?

将一个类的接口转换成用户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以进行工作。

假设现在有一个工作的接口,只要有工作的能力的类就可以实现该接口,例如,教师,司机等。
我们现在在客户端需要使用工作的接口。而现在又有一个志愿者的类,该类和工作的接口没有任何关系。但是现在要求可以通过IWork(工作接口)调用志愿者类,毕竟志愿者也是工作的,我们该如何处理呢?
根据开放-封闭原则,我们不可以修改志愿者类。所以我们采用适配的方式。

IWork.java 接口

//一个工作的接口
public interface IWork {
    void working();
}

教师类

public class Teacher implements IWork {
    @Override
    public void working() {
        System.out.println("我是一名老师,我的工作是教书育人。");
    }
}

司机类

public class Driver implements IWork {
    @Override
    public void working() {
        System.out.println("我是一名司机,我的工作是方便他人。");
    }
}

志愿者类

public class Voluntee {
    public void doingSomething(){
        System.out.println("我是学生,现在是志愿者,帮助空巢老人做家务。");
    }
}

志愿者的适配器类

public class VolunteeAdatper implements IWork {
    private Voluntee voluntee = new Voluntee() ; //志愿者类的引用
    @Override
    public void working() {
        voluntee.doingSomething();
    }
}   

客户端代码

public class Main {
    public static void main(String[] args) {
        IWork work1 = new Driver();
        IWork work2 = new Teacher();
        IWork work3 = new VolunteeAdatper();

        work1.working();
        work2.working();
        work3.working();
    }
}

执行结果

我是一名司机,我的工作是方便他人。
我是一名老师,我的工作是教书育人。
我是学生,现在是志愿者,帮助空巢老人做家务。

IWork接口完全兼容Voluntee类。

何时使用适配器类?应该如何使用

使用适配器的原因就是因为接口不兼容,使用该模式是由于前期的设计出现问题导致后期的维护困难迫不得已才使用的。如果我们能够事先预防接口不兼容的问题,不匹配就不会发生,在有的小接口不统一问题发生时,及时重构,问题也不会扩大;只有碰到无法改变原有设计和代码的情况时,才考虑适配。事后控制不如事中控制,事中控制不如事前控制。

你可能感兴趣的:(JAVA设计模式)