Java设计模式----适配器模式

本文以一只残废狗为例,狗本身应该有吃和跑两个能力,但是该狗只有吃的能力,通过适配器模式实现狗可以跑的功能.

1. 类适配器

1.1 先创建一个狗的接口,具有跑和吃两个方法

/**
 * 定义狗接口,具备2个功能
 *  1- 狗能跑
 *  2- 狗能吃
 */
public interface Dog {
    public void run();
    public void eat();
}

1.2 实际有残疾狗只能吃

/**
 * 定义残废狗
 * 残废狗只能吃
 */
public class DisabledDog {

    public void eat(){ 
        System.out.println("Dog can eat!"); 
    }
}

1.3 残疾狗的适配器

/**
 * 创建适配器
 *  1- 残废狗使用了适配器(安装假肢)
 *  2- 残废狗实现了狗类接口
 */
public class Adapter extends DisabledDog implements Dog{

    @Override
    public void run() { 
        System.out.println("Dog can run!"); 
    }

    // 残废狗本身就能吃,所以残废狗不需要实现狗接口的吃方法
}

1.4 残废狗使用适配器

/**
 * 定义使用类
 * 残废狗尝试跑和吃
 */
public class Play {
    public static void main(String[] args) {
        // 残废狗装载适配器(假肢)
        Dog dog = new Adapter();
        dog.eat();
        // 残废狗尝试跑
        dog.run();
    }
}

2. 方法适配器

2.1 残疾狗的适配器
将1.3的适配器修改

/**
 * 创建适配器
 *  1- 残废狗使用了适配器(安装假肢)
 *  2- 残废狗实现了狗类接口
 */
public class AdapterBox implements Dog{

    // 残废狗来看医生
    private DisabledDog disabledDog;

    // 给残废狗使用的适配器
    public AdapterBox(DisabledDog disabledDog){
        super();
        this.disabledDog = disabledDog;
    }

    // 狗医生通过适配器帮助残废狗实现跑
    @Override
    public void run() { 
        System.out.println("Dog can run!"); 
    }

    // 狗自己实现吃
    @Override
    public void eat() { 
        disabledDog.eat(); 
    }
}

猜你喜欢

转载自blog.csdn.net/qq_26555463/article/details/77968383