Java设计模式-适配器模式
最近学习到设计模式,现总结个人学习适配器模式内容。
上一篇:Java设计模式-建造者模式
文章目录
- 定义
- 优缺点
- 优点
- 缺点
- 代码
- 类适配器
- 实现
- 测试:
- 对象适配器
- 实现
- 测试:
- 缺省适配器
- 实现
- 测试:
定义
适配器模式将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中,作为两个不兼容接口之间的桥梁。
优缺点
优点
缺点
代码
类适配器
实现
class Coldwater {
public String getColdWater(){
String watertemperature = "0°";
System.out.println("获取到了冷水");
return watertemperature;
}
}
interface Boilingwater{
String getBoilingwater();
}
/** * 类适配器,通过继承的方式继承被适配对象, * 通过定义的抽象方法,重新产出需要的结果 * 优点: * 使用简单,直接继承被适配器,得到原数据。通过重写接口方法,获得需要适配的结果 * 缺点: * java类是单一继承,不利于扩展 * @author cc百川 */
class Waterdispenser extends Coldwater implements Boilingwater{
@Override
public String getBoilingwater() {
//饮水机得到冷水
String watertemperature = getColdWater();
//通过中间加热过程
System.out.println("饮水机得到了"+watertemperature+"的水,加热中。。。");
//产生开水,供饮用
watertemperature = watertemperature.replace("0°", "100°");
System.out.println("饮水机加热后的水温"+watertemperature);
return watertemperature;
}
}
测试:
对象适配器
实现
class Coldwater {
public String getColdWater(){
String watertemperature = "0°";
System.out.println("获取到了冷水");
return watertemperature;
}
}
interface Boilingwater{
String getBoilingwater();
}
/** * 对象适配器,通过组合(成员变量)被适配对象的方式, * 通过定义的抽象方法,重新产出需要的结果 * 优点: * 没有了类适配器的单一继承限制。 * 缺点: * 如果需要重写被适配的方法[不是继承或实现不能重写被适配器的方法],没有类适配器那么方便【继承重写即可】 * @author cc百川 */
class Waterdispenser implements Boilingwater{
private Coldwater coldwater;
public Waterdispenser(Coldwater coldwater) {
this.coldwater = coldwater;
}
@Override
public String getBoilingwater() {
String watertemperature = null;
if(coldwater != null) {
//饮水机得到冷水
watertemperature = coldwater.getColdWater();
//通过中间加热过程
System.out.println("饮水机得到了"+watertemperature+"的水,加热中。。。");
//产生开水,供饮用
watertemperature = watertemperature.replace("0°", "100°");
System.out.println("饮水机加热后的水温"+watertemperature);
}
return watertemperature;
}
}
测试:
缺省适配器
原接口中定义的方法太多,而其中大部分又不被需要时,这种模式非常实用。如实例中的饮水机,有的地方通常是和开水,而有的地方和温水等等。在不同的地方使用,只需要重写部分方法即可,其他保持默认值。
实现
/** * 饮水机 * @author cc百川 */
interface Waterdispenser{
String getColdWater();//冷水
String getBoilingWater();//开水
String getWarmWater();//温水
String getIceWater();//冰水
}
/** * 缺省适配器,抽象类,里面的方法全都使用默认实现 * 用户按照需求进行自我实现即可 * @author cc百川 */
abstract class DefaultAdapter implements Waterdispenser{
@Override
public String getColdWater() { return null;}
@Override
public String getBoilingWater() { return null;}
@Override
public String getWarmWater() { return null;}
@Override
public String getIceWater() { return null;}
}
测试:
适配器模式适用于所创建的产品因各种差异性而不能直接使用的场景。特别注意缺省适配器的应用。
以上仅为个人学习,如果错误望指出,谢谢。
还没有评论,来说两句吧...