`
qingzi2534
  • 浏览: 257934 次
  • 性别: Icon_minigender_2
  • 来自: 烟台
社区版块
存档分类
最新评论

请您先登录,才能继续操作

设计模式之适配器 Adapter

阅读更多
Adapter  换个包装,再度利用。

此实例把“Hello”字符串输出成

(Hello)

 *Hello*

适配器起到把交流电转换成直流电的作用,在这里的适配器是PrintBanner类,它分别利用showWithParen方法,showWithAster方法来实现printWeak和printStrong。

                                            表2.1 使用电源与程序实力的对应关系
  电源 程序示例
既有的内容 交流电220v Banner类 (showWithParen,showWithAster)
转换装置 适配器 PrintBanner类
需要的结果 直流电12v Print接口(printWeak,PrintStrong)

 

 

 

 

Banner 类
  1. public  class Banner {   
  2.   private String string;   
  3.   public Banner (String string) {   
  4.     this.string = string ;   
  5.   }   
  6.   public void showWithParen() {   
  7.     System.out.println("("+string+")");   
  8.    }   
  9.    public void showWithAster() {   
  10.     System.out.println("*"+string +"*");   
  11.   }   
  12. }  
Print类
  1. public interface Print {   
  2.   public abstract void printWeak();   
  3.   public abstract void printStrong();   
  4. }  
PrintBanner 类
  1. public class PrintBanner extends Banner implements Print {   
  2.    public PrintBanner(String string) {   
  3.        super(string);   
  4.  }   
  5.  public void  printWeak() {   
  6.     showWithParen();   
  7.   }   
  8.   public void printStrong() {   
  9.   showWithActer();   
  10.   }   
  11. }  
Main 测试类
  1. public class Main {   
  2.   public static void  main(String[] args) {   
  3.     Print p = new PrintBanner("Hello");   
  4.     p.printWeak();   
  5.     p.printStrong();   
  6.  }   
  7. }  
分享到:
评论
12 楼 qqwjz 2007-07-10  
封装“变化”
11 楼 zhangsheng79 2007-07-09  
不评价,建议好好看看设计模式的目的
10 楼 qqwjz 2007-07-09  
akun_007 写道
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?


你说的情况是“类的Adapter”,换成“对象的Adapter”就不是这个样式了。我个人觉得引入适配器的目的是为了在不改变主程序(除了New对象之外)前提下,添加新的功能,当然这个新的功能可以是你即将要写的,也可以是集成和兼容已经有的功能。本质上是一个面向接口编程的思想。
9 楼 kevinStar 2007-01-18  
qingzi2534 写道
本示例中,在建立PrintBanner类的对象时,把它指定到Print类变量,即:
print  p = new PrintBanner("Hello");
为什么不采取下面这个制定到PrintBanner类变量的做法呢?
PrintBanner p = new PrintBanner("Hello");


调用统一,方便业务拓展。可能将来你还要有打印printcard类。
你举的例子是类适配器,还有对象适配器。
8 楼 qingzi2534 2007-01-18  
我也是初学者,现在才看了几个模式而已,只有懂得了怎么用它,才是真正的掌握。希望大家都说说自己的理解,这样才能共同进步啊。
7 楼 akun_007 2007-01-18  
qingzi2534 写道
akun_007 写道
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?

你一个“粗略”把适配器的精髓都去掉了,如果这么简单的认为,就没有这么多设计模式了。
如果用适配器这种模式,可以降低代码的耦合度。
比如,从Main类的源代码就完全看不出有Banner类,showWithParen方法,showWithAster方法。
换个说法,如果你要改输出的格式,只需要改PrintBanner类就可以了,Main类完全不用改变。


谢谢qingzi2534,我对设计模式的学习和积累不是很多,现在正在学习你的文章。
6 楼 deafwolf 2007-01-17  
设计模式是按作用分的,看代码的话,基本都是adapter或者bridge
而且我一向认为模式是重构出来的
5 楼 qingzi2534 2007-01-17  
akun_007 写道
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?

你一个“粗略”把适配器的精髓都去掉了,如果这么简单的认为,就没有这么多设计模式了。
如果用适配器这种模式,可以降低代码的耦合度。
比如,从Main类的源代码就完全看不出有Banner类,showWithParen方法,showWithAster方法。
换个说法,如果你要改输出的格式,只需要改PrintBanner类就可以了,Main类完全不用改变。
4 楼 cui09 2007-01-17  
在你的例子中,PrintBanner和Print接口所提供的方法虽然相同,但在某些情形下,PrintBanner类的方法可能会比较多,这个例子的用意很明显,是先将其指定到Print类型变量后再使用,其实是要利用Print接口的方法,而不是PrintBanner类的方法。
3 楼 akun_007 2007-01-17  
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
2 楼 qingzi2534 2007-01-17  
本示例中,在建立PrintBanner类的对象时,把它指定到Print类变量,即:
print  p = new PrintBanner("Hello");
为什么不采取下面这个制定到PrintBanner类变量的做法呢?
PrintBanner p = new PrintBanner("Hello");
1 楼 wenjixiao 2007-01-16  
见不着女的,见着一个,支持一下。

相关推荐

    设计模式之 适配器 Adapter C++ 源码

    设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...

    设计模式之适配器Adapter

    标题“设计模式之适配器Adapter”暗示我们将深入探讨适配器模式的核心概念和应用场景。适配器模式通常应用于以下场景: 1. 当系统中存在一个已经存在的类,其接口不符合新需求时,可以使用适配器模式来调整接口,使...

    设计模式之适配器模式

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,主要解决系统间接口不兼容的问题。适配器模式允许不同接口的类协同工作,通过创建一个适配器对象来转换不兼容的接口,使得原本由于接口不匹配而...

    java设计模式之适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...

    设计模式之适配器模式(Adapter Pattern)

    适配器模式是软件设计模式中的一种,它的主要目的是解决接口不兼容问题,使得原本由于接口差异无法协同工作的类能够协同工作。在实际的软件开发过程中,我们常常遇到这样的情况:旧有的系统或第三方库提供了丰富的...

    c++-设计模式之适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个接口转换为客户端期望的另一个接口。适配器模式常用于解决由于接口不兼容而无法正常工作的类之间的协作问题。 适配器模式的组成 目标接口(Target...

    设计模式之适配器模式(Adapter模式)

    介绍24设计模式中的Adapter模式,如果使用,实例讲解,等等

    设计模式——适配器模式(adapter)

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决系统中的接口不兼容问题,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在本文中,我们将深入探讨适配器模式的概念、结构、作用...

    设计模式之适配器模式Java实现和类设计图

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和...

    设计模式 - 适配器模式(C++实例)

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    Java设计模式之适配器模式

    ### Java设计模式之适配器模式详解 #### 引言 在软件开发中,我们经常遇到需要使用已有的类库,但这些类库的接口与我们的需求不匹配的情况。这时,适配器模式(Adapter Pattern)便能派上用场。适配器模式是一种...

    设计模式C++学习之适配器模式(Adapter)

    适配器模式(Adapter)是软件工程中一种常用的设计模式,它允许两个不兼容的接口之间进行通信。在C++编程中,适配器模式能够帮助我们复用现有的类,或者将第三方库的接口与我们的系统接口进行对接,从而提高代码的可...

    [结构型模式] head first 设计模式之适配器模式(Adapter)

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在一个已经存在的组件,但其接口不符合当前项目的需求时,适配器模式就能发挥作用。通过适配器,我们可以复用现有的...

    设计模式之适配器模式与外观模式demo

    在软件设计领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的...这个"设计模式之适配器模式与外观模式demo"资源为学习和实践这两种模式提供了宝贵的实例,对于提升编程技能和设计思维具有积极意义。

    深入浅出设计模式之适配器模式与外观模式

    ### 深入浅出设计模式之适配器模式与外观模式 在软件工程领域,设计模式被广泛地应用于解决常见的编程问题。其中,《Head First 设计模式》是一本非常受欢迎的经典著作,它通过生动有趣的例子帮助读者理解并掌握...

    C++设计模式之适配器模式(Adapter)

    C++设计模式之适配器模式(Adapter) C++设计模式之适配器模式(Adapter)是指将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要应用于希望复用...

Global site tag (gtag.js) - Google Analytics