前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解设计模式-Adapter模式

详解设计模式-Adapter模式

作者头像
程序员小涛
发布2021-12-06 13:23:55
4060
发布2021-12-06 13:23:55
举报
文章被收录于专栏:涛的程序人生

文章概览

1. Adapter模式

如果想让额定工作电压是直流12V的笔记本电脑在交流100V的AC电源下工作,应该怎么做呢?通常,我们会使用AC适配器,将家庭用的100V电压转换成我们需要的12V电压。这就是适配器所完成的工作,它工作在实际情况与需求之间,弥补两者之间的差距。

在程序世界中,经常会存在现有程序无法直接使用的问题,需要做适当的变换之后才能使用。这种用于填补“现有的程序”和“所需的程序”之间差异的设计模式就是Adapter模式。 Adapter模式也被称为Wrapper模式。Wrapper有“包装器”的意思,就像用精美的包装纸将商品包成礼物那样,替我们把某样东西包起来,使其能够用于其他用途。 Adapter模式有两种:

  • 类适配器模式(使用继承的适配器)
  • 对象适配器模式(使用委托的适配器)

2.示例程序1(使用继承的适配器)

这是一段会将输入的字符串显示为(Hello)或者*Hello*的简单程序。 目前在Banner类中,有将字符串用括号括起来的showWithParen方法,和将字符串用*号括起来的showWithAster方法。我们假设这个Banner类是类似上面所说的交流100V的实际情况。

假设Print接口中声明了两种方法,即弱化字符串显示(加括号)的printWeak和强调字符串的printStrong方法。我们假设这个接口是类似上面所说的直流12V的需求。

现在要做的就是使用Banner类编写一个实现了Print接口的类,也就是说要做一个将交流100V转换成直流12V的适配器。

扮演适配器角色的是PrintBanner类。该类继承了Banner类并实现了“需求”–Print接口。

类图

(待补充)

Banner类

假设Banner类是现在的实际情况。

代码语言:javascript
复制
public class Banner {
    private String string;
    public Banner(String string) {
        this.string = string;
    }

    public void showWithParen() {
        System.out.println("(" + string + ")");
    }

    public void showWithAster() {
        System.out.println("*" + string + "*");
    }
}

Print接口

假设Print接口是“需求”的接口。

代码语言:javascript
复制
public interface Print {
    public abstract void printWeak();
    public abstract void printStrong();
}

PrintBanner类

PrintBanner扮演适配器的角色。

代码语言:javascript
复制
public class PrintBanner extends Banner implements Print{
    public PrintBanner(String string) {
        super(string);
    }

    public void printWeak() {
        showWithParen();
    }

    public void printStrong() {
        showWithAster();
    }
}

Main类

代码语言:javascript
复制
public class Main {
    public static void main(String args[]) {
        Print p = new PrintBanner("Hello");
        p.printWeak();
        p.printStrong();
    }
}

运行结果

run
run

未完待续

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章概览
  • 1. Adapter模式
  • 2.示例程序1(使用继承的适配器)
    • 类图
      • Banner类
        • Print接口
          • PrintBanner类
            • Main类
              • 运行结果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档