微信号:Arisono

介绍:一切为了提高你的Android开发技术,提高竞争力;核心是分享,实战;这里有开源github上的众多干货,绝不容错过!

Android设计模式——适配器模式

2016-06-28 20:24 吴文高

适配器模式:把一个类的接口转换为客户端所期待的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。

又称为:转化器模式、变压器模式或包装模式。

做过Android Ap开发的朋友一般情况下都会用到Google 提供的BaseAdapter 适配器做扩展,用来填充ListViewGridView 等窗口控件。用过的朋友都会觉得很简单很方便就可以对控件做一个数据源。而BaseAdapter 正是一个适配器,Google 考虑到适配器的一个特性则可以如此概括用“既有内容”去实现“需要结果”。

Adapter Pattern

  适配器模式共分为两种:

类的 Adapter Pattern (即所谓的继承)

对象的 Adapter Pattern (即所谓的委托)

下面通过实例来理解这两种适配器模式:

场景需求

给定的一个字符串,将其按一定风格显示出来,并打印在 Android 的文本框里面,按照这个简单的需求,分别用适配器的这两种模式来编写代码,最终完成的工程目录包如下:

 

模式一,类的继承:

Banner

 

package com.terry.Pattern_one;

 

public class Banner {

 

   private String string;

   

   public Banner(String string)

    {

       this.string=string;

    }

   

   

   public String showWithParen(){

       return "("+string+")";

    }

   

   public String showWithAster(){

       return "*"+string+"*";

    }

}

 

Print接口

 

package com.terry.Pattern_one;

 

public interface Print {

 

   public abstract String printWeak();

   

   

    public abstract String printStrong();

   

}

 

PrintBanner

 

package com.terry.Pattern_one;

 

public class PrintBanner extends Bannerimplements Print{

 

   public PrintBanner(String string) {

       super(string);

       // TODO Auto-generated constructor stub

    }

 

   @Override

   public String printStrong() {

       // TODO Auto-generated method stub

       return showWithAster();

    }

 

   @Override

   public String printWeak() {

       // TODO Auto-generated method stub

       return showWithParen();

    }

 

}

 

  模式一使用 Print 来声明“需要结果”,接下来使用一个负责适配、转换的类 PrintBanner 来使用“既有内容”Banner,将既有内容转换成“需要结果”Print 。可以理解成生活中的交流电一个有220V的交流电(Banner) 通过适配器(PrintBanner) 转换成日常家电可用的 ( Print) 12V 电流。

 

模式二,对象的委托:

Print抽象类

 

package com.terry.Pattern_two;

 

public abstract class Print {

 

   public abstract String PrintWeak();

   

   public abstract String PrintStrong();

}

 

PrintBanner

 

package com.terry.Pattern_two;

 

import com.terry.Pattern_one.Banner;

 

public class PrintBanner extends Print{

 

   private Banner banner;

   

   public PrintBanner(String string){

       banner=new Banner(string);

    }

   

   @Override

   public String PrintStrong() {

       // TODO Auto-generated method stub

       return banner.showWithAster();

    }

 

   @Override

   public String PrintWeak() {

       // TODO Auto-generated method stub

       return banner.showWithParen();

    }

 

}

 

  “委托”从字面上理解为:将某事交由某人去执行或者代办。模式二的意思为,将“需要结果”抽象出来(Print ),然后让PrintBanner 扩展其功能,将Banner 对象存储在PrintBanner 里面,当系统调用PrintBanner PrintWeak时,并不是自己动手处理,而是把工作委托由“既有内容”Banner showWithParen 代为执行。

经常做项目,自己会有一些自己觉得不错的类,适配器模式可以把过去的类换个包装重新建立出需要的类,这个模式可以帮你节省建立必要方法组群的时间,以便减轻写程序的负担和工作量。


 
Android实战开发 更多文章 Android 开发如何做好内存优化 Android 获取屏幕尺寸与密度 我是如何自学Android,资料分享(2015 版) Android开发技术周报 Issue#0 Android开发技术周报 Issue#1
猜您喜欢 【Love Data 大数据峰会】活动报名马上截止啦! 简单谈谈动态规划 第一个压力测试脚本 今天你尽力了吗? “奔三老男孩”嵌入式工程师的寻梦之旅