java23种设计模式之三: 适配器模式

一.适配器模式
   就是个通过一个中间件转化,可以将不匹配的两件事整合到一起,把不匹配变的匹配。

二.适配器分类
  1.类适配器
   2.对象适配器

三. 适配器的3种组成
  1.类适配器组成
    1.2个接口 A,B ,分别定义2种不同的方法
    2.1个实现类C,实现A接口,并重写方法
    3.适配类继承C 并实现B接口
  2.对象适配器
      1.2个接口 A,B ,分别定义2种不同的方法
    2.1个实现类C,实现A接口,并重写方法,同时定义B接口为该类的属性,通过构造方法将B接口传入赋值
    3.B接口的实现类

  3.接口适配器

    1.A接口中有10 个方法

    2.抽象类实现A接口,重写A接口中任意方法

    3.实现类来完成具体细节

四.应用场景

  适配器模式其核心是将2个或多个完全没有关联的接口通过一个中间类或者接口的方式关联在一起,其目的是为了调用的方便。

  类适配器:利用多态的方式来提高面向对象模式来实现类适配器,在编程中提高了解耦合的特点

  对象适配器:通过类属性的方式来实现对象适配器,虽然其中也利用了接口的多态,但是这种方式的耦合度高,个人不建议这样用

  接口适配器:假如有个A接口中有10+个方法,我们只需要重写其中的1个方法,此时就需要一个抽象类全部空实现这个大的抽象类,然后再通过子类继承父类的方式,可以重写

        父类中我们需要的方法即可

五.具体实现过程

 1.类适配器实现代码

/**
 * USB接口
 * @author zhao
 *
 */
public interface USB {
    public void USB();
}

/**
 * typeC接口
 * @author zhao
 *
 */
public interface TypeC {
    public void typeC();
}

/**
 * typeC接口的实现类
 * @author zhao
 *
 */
public class TypeCImpl implements TypeC{

    @Override
    public void typeC() {
        System.out.println("...C...接口...");
    }

}

/**
 * 适配器类
 * @author zhao
 *
 */
public class Adapter extends TypeCImpl implements USB{

    @Override
    public void USB() {
        System.out.println("USB 转换成  TypeC 接口...");
        typeC();
    }
}

//类适配器_测试类代码
public class MainTest {
    public static void main(String[] args) {
        USB adapter = new Adapter();
        adapter.USB();
    }
}

// 测试类代码
public class MainTest {
  public static void main(String[] args) {
      USB adapter = new Adapter();
      adapter.USB();
  }

}

2.对象类适配器

/**
 * USB接口
 * @author zhao
 *
 */
public interface USB {
    public void USB();
}

/**
 * typeC接口
 * @author zhao
 *
 */
public interface TypeC {
    public void typeC();
}
/**
 * typeC接口的实现类
 * @author zhao
 *
 */
public class TypeCImpl implements TypeC{

    @Override
    public void typeC() {
        System.out.println("...C...接口...");
    }

}

/** 
 * 对象类适配器
 *
@author zhao
 *
 
*/
public class AdapterObject implements USB{

  private TypeC typeC;

  public AdapterObject(TypeC typeC){
    
this.typeC = typeC;
  }
  
  @Override
  public void USB() {
    System.out.println(
"...obj...convers");
    typeC.typeC();
   }
}
public class MainTest {
    public static void main(String[] args) {
        TypeC c = new TypeCImpl();
        USB adapterObj = new AdapterObject(c);
        adapterObj.USB();
    }
}

// 测试类代码

public class MainTest {
  public static void main(String[] args) {
    
TypeC c = new TypeCImpl();
    
USB adapterObj = new AdapterObject(c);
    
adapterObj.USB();
  }
}

3.接口类适配器

/**
 * 接口类A
 * @author pengbo.zhao
 *
 */
public interface AdapterInterface {
    void test0();
    void test1();
    void test2();
    void test3();
    void test4();
    void test5();
    void test6();
    void test7();
    void test8();
    void test9();
}

/**
 * 抽象类全部空实现
 * @author pengbo.zhao
 *
 */
public abstract class AdapterInter implements AdapterInterface{
    
    @Override
    public void test0() {
        // TODO Auto-generated method stub
    }
    
    @Override
    public void test1() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test2() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test3() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test4() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test5() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test6() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test7() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test8() {
        // TODO Auto-generated method stub
    }
    @Override
    public void test9() {
        // TODO Auto-generated method stub
    }
}

/**
 * 适配器实现类,可以重写抽象类中的任意方法
 * @author pengbo.zhao
 *
 */
public class AdapterImpl extends AdapterInter{
    
    
    @Override
    public void test0() {
        System.out.println("... 适配器接口...0"); 
    }
    
    @Override
    public void test3() {
        System.out.println("... 适配器接口...3");
    }
}
原文地址:https://www.cnblogs.com/MrRightZhao/p/10784106.html