欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

java设计模式——adapter模式

发布时间:2024/8/1 asp.net 73 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java设计模式——adapter模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

描述

将现有的模块接口转换一下,以适配新的接口需求,用于填补“现有的程序“和“所需的程序“之间差异。通常也会被称为:wrapper(包装)模式。

模式中的角色

adapter模式中有以下主要角色:
1. target(对象)
该角色负责定义所需的方法,描述需要adapter转换之后的接口。
2. client(请求者)
转换之后的接口使用者,client通过adapter访问已有的旧接口。
3. adaptee(被适配者)
已经存在的旧接口实现者,提供老旧的接口实现,是需要adapter转换的对象。
4. adapter(适配者)
是本模式的核心,用于将现有的接口转换成需要的接口。

模式分类

在实际操作中,通常adapter模式有以下两种形式:

  • 类适配器模式(使用继承的适配器)
  • 对象适配器模式(使用委托的适配器)
  • 为了方便描述,这里我们举一个实际的例子,这里的例子就是广告条幅展示的例子。现有的广告条幅展示形式有带有括号的展示方式:
    (这里是广告的内容)
    还有带有星号的形式:
    *这里是广告的内容*
    这是目前已有的两种形式。现在有一个新的电子广告展示器,可以展示加粗和不加粗的字体广告,加粗的形式就是使用星号将广告的内容包含起来,就像上面的形式;不加粗的就是使用括号将广告内容包含起来,也是和上面的一样。
    现在的做法就是做一个适配器,使用这个适配器adapter将老的广告展示转换成新的广告展示形式
    这个例子中涉及的模式角色有:

    • target——新的广告展示形式
    • client——广告投递商
    • adaptee——旧的广告展示牌
    • adapter——适配器,需要实现的

    涉及到的java类有:

    • IPrint——这是一个接口,对应target
    • Main——这是主类,对应client
    • Banner——这是旧的广告展示实现,对应adaptee
    • PrintBanner——这是广告展示转换器,对应adapter

    类适配器模式

    类适配器模式使用类继承和接口实现的方式实现,类图描述如下:

    代码如下:

    IPrint

    /************************************************************************* > File Name: IPrint.java > Author: CreateChance > Mail: createchance@163.com > Created Time: Fri Mar 2 11:29:26 2018************************************************************************/ public interface IPrint { void printWeak(); void printStrong(); } /*************************************************************************> File Name: Banner.java> Author: CreateChance> Mail: createchance@163.com > Created Time: Fri Mar 2 11:30:10 2018************************************************************************/ public class Banner {private String name;public Banner(String name) {this.name = name;}public void showWithParen() {System.out.println("(" + name + ")");}public void showWithAster() {System.out.println("*" + name + "*");} }

    PrintBanner

    /*************************************************************************> File Name: PrintBanner.java> Author: CreateChance> Mail: createchance@163.com > Created Time: Fri Mar 2 11:32:59 2018************************************************************************/ public class PrintBanner extends Banner implements IPrint {public PrintBanner(String name) {super(name);}@Overridepublic void printWeak() {super.showWithParen();}@Overridepublic void printStrong() {super.showWithAster();} }

    Main

    /************************************************************************* > File Name: Main.java > Author: CreateChance > Mail: createchance@163.com > Created Time: Fri Mar 2 11:35:06 2018************************************************************************/ public class Main { public static void main(String argv[]) { // 这里我们使用IPrint类型,就是为了面向接口,而不是面向具体实现类。 // 因为Main作为一个client对象,只需要直接接口定义就行了,不需要知道实现 IPrint printer = new PrintBanner("This is banner."); printer.printWeak(); printer.printStrong(); } }

    对象适配器模式

    和类适配器模式不同的是,对象适配器模式使用的组合模式实现,也就是委托。将自己需要完成的一些工作,委托给别的对象完成。上面的类适配器模式中,我们将PrintBanner类继承自Banner来获得Banner的能力,其实我们还可以通过委托来实现。具体的做法就是在PrintBanner中加入一个内部字段,类型就是Banner。通过内部持有的Banner对象来访问Banner的方法。所做的修改就是将类适配模式中的PrintBanner修改为如下:

    /*************************************************************************> File Name: PrintBanner.java> Author: CreateChance> Mail: createchance@163.com > Created Time: Fri Mar 2 11:37:43 2018************************************************************************/ public class PrintBanner implements IPrint {private Banner banner;public PrintBanner(String name) {banner = new Banner(name);}@Overridepublic void printWeak() {banner.showWithParen();}@Overridepublic void printStrong() {banner.showWithAster();} }

    类图描述如下:

    总结

    以上是生活随笔为你收集整理的java设计模式——adapter模式的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。