客户端通过类的接口访问提供的服务,一般现有类可提供用户的所需功能,而有时不能满足用户的期望。例如有两个毫无关联的类组合在一起使用,要么就是修改各自的接口,但是在不修改各自接口的前提下,应该怎么做呢?使用Adapter模式,使得原本需要修改接口的才能在一起工作的两个类可以通过此模式不进行修改接口,在一起工作。
举个例子,面包制作商可以制作面包,蛋糕制作商可以制作蛋糕,某工厂以前请了面包制作商只做面包,而现在还要制作蛋糕。
传统方法 增加一个蛋糕制作的接口,并且在实现中增加制作蛋糕的实现。
public interface MakeFactory{ String getCake(); String getBread(); }实现:
public class MakeFactoryImpl implements MakeFactory{ public String getBread() { // TODO Auto-generated method stub return null; } public String getCake() { // TODO Auto-generated method stub return null; } }这样就ok了。
但是想想,以前他是做面包的,有做面包的一套体制,如果再把做蛋糕加进去,工序有可能会乱。并且无法工作。
这样我们可以通过Adapter模式。
/** * Adaptee 被适配器 * */ public class MakeBread { public String getBread(){ System.out.println("++++++bread++++"); return "bread"; }; }
以前我只有一个面包房,现在我还要蛋糕房
public interface MakeFactory{ String getCake(); String getBread(); }
最后看看如何通过适配器模式,将不相连的两个类配在一起工作。
/** * Adapter 适配器 * */ public class MakeCake extends MakeBread implements MakeFactory { public String getCake() { System.out.println("++++++cake++++"); return "cake"; }; }
这样做,我们的MakeFactory工厂就可以有条不紊的进行制作。
我们测试一下
public class Client { /** * @param args */ public static void main(String[] args) { MakeCake m = new MakeCake(); m.getCake(); m.getBread(); } }
测试结果
++++++cake++++++++++bread++++
从这里不难看出,此接口可以满足用户的需要。