适配器模式:
两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
举个例子不知恰当不恰当:喝水,是不可以直接喝的,需要一个容器,如水瓶,要先将水放进水瓶中再进行饮用。
/**
* 水
* 适配器模式
* 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);
}
}
}
若有理解不到位的地方希望大家能够指点一下,也避免让别人犯错。非常感谢!!!