设计模式-适配器模式

博客介绍了适配器模式,它是两个不兼容接口之间的桥梁,属于结构型模式,能结合两个独立接口的功能。通过喝水需借助水瓶这个容器的例子进行说明,还希望大家对理解不到位处给予指点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适配器模式:

       两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

       这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

       举个例子不知恰当不恰当:喝水,是不可以直接喝的,需要一个容器,如水瓶,要先将水放进水瓶中再进行饮用。

/**
 * 水
 * 适配器模式
 * Created by h on 2019/3/17.
 */
public class Water {

    private double volume;

    public Water(double volume) {
        this.volume = volume;
    }

    public double getVolume() {
        return volume;
    }

    public void setVolume(double volume) {
        this.volume = volume;
    }
}
/**
 * 水壶
 * 适配器模式
 * Created by h on 2019/3/17.
 */
public class WaterBottle {

    /**
     * 容量(最多可以装水量)
     */
    private double capacity = 100;
    /**
     * 水桶中的水
     */
    private double volume;

    /**
     * 所需要装的水
     */
    private Water water;

    public WaterBottle(double capacity) {
        this.capacity = capacity;
    }

    public double getCapacity() {
        return capacity;
    }

    public void setCapacity(double capacity) {
        this.capacity = capacity;
    }

    public double getVolume() {
        return volume;
    }

    public void setVolume(double volume) {
        this.volume = volume;
    }

    public Water getWater() {
        return water;
    }

    /**
     * 装水
     * @param water
     */
    public void setWater(Water water) {
        double volume = water.getVolume();
        if (capacity < volume) {
            volume = capacity;
        }
        this.volume = volume;
        // 可能一次性装不完,设置剩余多少水
        water.setVolume(water.getVolume() - volume);
        this.water = water;
    }
}

 喝水:

package com.designPattern.pojo;

/**
 * 人喝水-
 * 水Water,水壶WaterBottle,人无法直接喝水,需要将水放入水壶中,这时需要适配器
 * 适配器模式
 * Created by h on 2019/3/17.
 */
public class WaterAdapter {
    private Water water;
    private WaterBottle waterBottle;

    public WaterAdapter(Water water, WaterBottle waterBottle) {
        this.water = water;
        this.waterBottle = waterBottle;
        this.waterBottle.setWater(water);
    }

    /**
     * 喝水
     * @param number
     */
    public void drinkWater(double number) {
        double volume = waterBottle.getVolume();
        if (volume == 0 && water.getVolume() != 0) {
            // 把剩余的水装进水壶
            waterBottle.setWater(water);
            volume = waterBottle.getVolume();
        } else if (volume == 0 && water.getVolume() == 0) {
            System.out.println("水不够了...");
            return;
        }
        double flag = number;
        if (number > volume) {
            flag = volume;
        }
        double v = volume - flag;
        waterBottle.setVolume(v);
        System.out.println("喝了" + flag + ",瓶里还有:" + waterBottle.getVolume());
        if (flag != number) {
            // 水壶剩余的水不够喝,判断是否还有水没有装进水壶中
            drinkWater(number - volume);
        }
    }
}

 若有理解不到位的地方希望大家能够指点一下,也避免让别人犯错。非常感谢!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值