`

Adaptor-适配器模式-1

阅读更多

作用:适配器(也叫Wrapper-包装器)将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也就是将既有内容转换成需要结果,是代码重用的利器之一,Java I/O中应用了这种模式(如ByteArrayInputStreamByteArrayOutputStream)。形象地:就如同笔记本电脑的电源适配器,一端是220交流电(既有内容),另一端12v直流电(需要结果)。

 

分类Adaptor模式有两种,类适配器(继承)、对象适配器(委托) 。两种模式各有优劣,具体在代码解析中说明。

 

 示例-类适配器(继承):

 

电源

程序示例

既有内容

交流电220V

Banner类(showWithParen,shoWithAster

转换装置

适配器

PrintBanner

需要的结果

直流电12V

Print接口 PrintWeakPrintStrong

 类图查看图片附件:类图-Adapter_1

//------------------------------------------Banner---------------------------------------------------------------

package adapter;

public class Banner{
 private String strings;
 public Banner(String strings){
  this.strings = strings;
 }
 public void showWithParen(){
   System.out.println("("+strings+")");
 }
 public void showWithAster(){
  System.out.println("*"+strings+"*");
 }
}

//------------------------------------------PrintBanner---------------------------------------------------------------

package adapter;
public class PrintBanner extends Banner implements Print{
 public PrintBanner(String strings){
  super(strings);//
父类构造函数来初始化~~
 }
 public void printWeak(){
  showWithParen();
 }
 public void printStrong(){
  showWithAster();
 }
}

//------------------------------------------Print接口---------------------------------------------------------------

package adapter;

public interface Print{
 public abstract void printWeak();
 public abstract void printStrong();
}

//------------------------------------------测试类---------------------------------------------------------------

public class Main{
 public static void main(String[] args){
  Print p = new PrintBanner("Hello");
  p.printWeak();
  p.printStrong();
 }
}

 示例-对象适配器(委托):

 类图查看图片附件:类图-Adapter_2

 

//------------------------------------------Banner---------------------------------------------------------------

    同上

//------------------------------------------PrintBanner---------------------------------------------------------------

package adapter;
public class PrintBanner extends Print{

       private Banner banner;

       public PrintBanner(String strings){

              this.banner = new Banner(strings);

       }

       public void printWeak(){

              banner.showWithParen();

       }

       public void printStrong(){

              banner.showWithAster();

       }

}

//------------------------------------------Print---------------------------------------------------------------

package adapter;

public interface Print{
public abstract class Print{

    public abstract void printWeak();

    public abstract void printStrong();

}

//------------------------------------------测试类---------------------------------------------------------------

同上

  • 描述: 类图-Adapter_1
  • 大小: 21.9 KB
  • 描述: 类图-Adapter_2
  • 大小: 25.4 KB
  • 描述: 类图-Adapter_3
  • 大小: 22.9 KB
  • 描述: 类图-Adapter_4
  • 大小: 22.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics