有些时候,我们想要使用一些类的某个功能,但是发现这个类提供的接口不符合我们的要求,这个时候就需要让这个接口符合要求,最直接想到的办法就是去改这个接口,但是这个办法明显违背了面向对象的原则。所以,为了解决这个办法,就提出了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来说要更有用一些,代码很简单,不解释,你们懂的。