JAVA设计模式-Adapter

    技术2026-01-07  7

        有些时候,我们想要使用一些类的某个功能,但是发现这个类提供的接口不符合我们的要求,这个时候就需要让这个接口符合要求,最直接想到的办法就是去改这个接口,但是这个办法明显违背了面向对象的原则。所以,为了解决这个办法,就提出了Adapter模式。Adapter模式分为两种,一种是类Adapter,一种是对象Adapter,后面将对这两种方法进行详细的解释。

     

        首先是类Adapter。

     

        interface Operation{ public int add(int a,int b); } class Calculater{ public int otherAdd(int a,int b){ return a + b; } } class OperationAdapter extends Calculater implements Operation{ @Override public int add(int a, int b) { // TODO Auto-generated method stub return otherAdd(a,b); } } public class Test{ public static void main(String[] args){ OperationAdapter adapter = new OperationAdapter(); int x = 10; int y = 20; int sum = adapter.add(x, y); System.out.println(x + " + " + y + " = " + sum); } }

     

        上面的代码中,OperationAdapter这个类将Calculater的add()方法适配到Operation这个类里面,OperationAdapter就是一个适配器。这样做有一个问题,当适配器需要从多个类里面调用方法的时候,类Adapter方法就不适用了,因为java不允许多重继承,既然不能用继承,那么就用组合好了,因此,就有了对象Adapter。

     

        package adapter.objectAdapter; interface Operation{ public int add(int a,int b); public int minus(int a,int b); public int multiplied(int a,int b); } class OtherAdd{ public int otherAdd(int a,int b){ return a + b; } } class OtherMinus{ public int minus(int a,int b){ return a - b; } } class OtherMultiplied{ public int multiplied(int a,int b){ return a * b; } } class OperationAdapter implements Operation{ private OtherAdd add; private OtherMinus minus; private OtherMultiplied multiplied; public OperationAdapter(){ add = new OtherAdd(); minus = new OtherMinus(); multiplied = new OtherMultiplied(); } @Override public int add(int a, int b) { // TODO Auto-generated method stub return add.otherAdd(a,b); } @Override public int minus(int a, int b) { // TODO Auto-generated method stub return minus.minus(a,b); } @Override public int multiplied(int a, int b) { // TODO Auto-generated method stub return multiplied.multiplied(a,b); } } public class Test{ public static void main(String[] args){ OperationAdapter adapter = new OperationAdapter(); int x = 10; int y = 20; System.out.println(x + " + " + y + " = " + adapter.add(x, y)); System.out.println(x + " - " + y + " = " + adapter.minus(x, y)); System.out.println(x + " * " + y + " = " + adapter.multiplied(x, y)); } }

     

        总的来说,对象Adapter比起类Adapter来说要更有用一些,代码很简单,不解释,你们懂的。

     

        下期预告,Proxy模式。

     

       

    最新回复(0)