Java设计模式-适配器模式

短命女 2023-07-15 07:00 12阅读 0赞

最近学习到设计模式,现总结个人学习适配器模式内容。
上一篇:Java设计模式-建造者模式

文章目录

  • 定义
  • 优缺点
    • 优点
    • 缺点
  • 代码
    • 类适配器
      • 实现
      • 测试:
    • 对象适配器
      • 实现
      • 测试:
    • 缺省适配器
      • 实现
      • 测试:

定义

适配器模式将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中,作为两个不兼容接口之间的桥梁。

优缺点

优点

缺点

代码

类适配器

实现

  1. class Coldwater {
  2. public String getColdWater(){
  3. String watertemperature = "0°";
  4. System.out.println("获取到了冷水");
  5. return watertemperature;
  6. }
  7. }
  8. interface Boilingwater{
  9. String getBoilingwater();
  10. }
  11. /** * 类适配器,通过继承的方式继承被适配对象, * 通过定义的抽象方法,重新产出需要的结果 * 优点: * 使用简单,直接继承被适配器,得到原数据。通过重写接口方法,获得需要适配的结果 * 缺点: * java类是单一继承,不利于扩展 * @author cc百川 */
  12. class Waterdispenser extends Coldwater implements Boilingwater{
  13. @Override
  14. public String getBoilingwater() {
  15. //饮水机得到冷水
  16. String watertemperature = getColdWater();
  17. //通过中间加热过程
  18. System.out.println("饮水机得到了"+watertemperature+"的水,加热中。。。");
  19. //产生开水,供饮用
  20. watertemperature = watertemperature.replace("0°", "100°");
  21. System.out.println("饮水机加热后的水温"+watertemperature);
  22. return watertemperature;
  23. }
  24. }

测试:

在这里插入图片描述

对象适配器

实现

  1. class Coldwater {
  2. public String getColdWater(){
  3. String watertemperature = "0°";
  4. System.out.println("获取到了冷水");
  5. return watertemperature;
  6. }
  7. }
  8. interface Boilingwater{
  9. String getBoilingwater();
  10. }
  11. /** * 对象适配器,通过组合(成员变量)被适配对象的方式, * 通过定义的抽象方法,重新产出需要的结果 * 优点: * 没有了类适配器的单一继承限制。 * 缺点: * 如果需要重写被适配的方法[不是继承或实现不能重写被适配器的方法],没有类适配器那么方便【继承重写即可】 * @author cc百川 */
  12. class Waterdispenser implements Boilingwater{
  13. private Coldwater coldwater;
  14. public Waterdispenser(Coldwater coldwater) {
  15. this.coldwater = coldwater;
  16. }
  17. @Override
  18. public String getBoilingwater() {
  19. String watertemperature = null;
  20. if(coldwater != null) {
  21. //饮水机得到冷水
  22. watertemperature = coldwater.getColdWater();
  23. //通过中间加热过程
  24. System.out.println("饮水机得到了"+watertemperature+"的水,加热中。。。");
  25. //产生开水,供饮用
  26. watertemperature = watertemperature.replace("0°", "100°");
  27. System.out.println("饮水机加热后的水温"+watertemperature);
  28. }
  29. return watertemperature;
  30. }
  31. }

测试:

在这里插入图片描述

缺省适配器

原接口中定义的方法太多,而其中大部分又不被需要时,这种模式非常实用。如实例中的饮水机,有的地方通常是和开水,而有的地方和温水等等。在不同的地方使用,只需要重写部分方法即可,其他保持默认值。

实现

  1. /** * 饮水机 * @author cc百川 */
  2. interface Waterdispenser{
  3. String getColdWater();//冷水
  4. String getBoilingWater();//开水
  5. String getWarmWater();//温水
  6. String getIceWater();//冰水
  7. }
  8. /** * 缺省适配器,抽象类,里面的方法全都使用默认实现 * 用户按照需求进行自我实现即可 * @author cc百川 */
  9. abstract class DefaultAdapter implements Waterdispenser{
  10. @Override
  11. public String getColdWater() { return null;}
  12. @Override
  13. public String getBoilingWater() { return null;}
  14. @Override
  15. public String getWarmWater() { return null;}
  16. @Override
  17. public String getIceWater() { return null;}
  18. }

测试:

在这里插入图片描述


适配器模式适用于所创建的产品因各种差异性而不能直接使用的场景。特别注意缺省适配器的应用。

以上仅为个人学习,如果错误望指出,谢谢。

发表评论

表情:
评论列表 (有 0 条评论,12人围观)

还没有评论,来说两句吧...

相关阅读