设计模式系列3---搞转换的适配器模型

来源:互联网 发布:ascii码排序 c语言 编辑:程序博客网 时间:2024/06/16 07:31

用过苹果手机的人对这两样东西应该很熟悉

enter image description here enter image description here

我们常常需要买多左边那个适配器来用,要不然以苹果这插头,没几个排插能插上的。
但有了这转换器的话,只要满足两端标准,就可以循环利用,很”环保”.

例如这样: enter image description here — 或者这个: enter image description here

想当年的巴别塔,如果有这样的做语言转换的翻译人,估计也建好了把。

起航

说这个转换器和排插,是因为今天要讲的适配器模型就和这个类似的道理 。
就让我们来举个例子看下怎么写适配器

假设: 小周要去米国读书,学校说你学费得给我交美元,没办法,在国外混,还是得准备点美国币美刀好,所以小周跑去银行用人民币换点美元,这样就能交学费上学啦。

这样我们就可以简单这样理解,人民币进银行 ,美元出。
有种白刀子进去红刀子出来的感觉。

所以我们这样设计下这个流程

public static void main(String[] args) {    Rmb myRmb = new Rmb(600);//小周从外婆借来的600块人民币    BankOfChina bankOfChina = new BankOfChina();//当地有中国银行可以换美钞          Dollar myTuition = bank.changeRmb2Dollar(myRmb);//同银行换美刀;}

好了我们的流程大概就是这样,这样小周同学就成功的把人民币换成了美元,可以开开心心的背着书包去上学了。具体的类如下

public class BankOfChina implements Rmb2DollarInterface {    @Override    public Dollar changeRmb2Dollar(Rmb myRmb) {        Dollar dollar = new Dollar();        dollar.setCount(myRmb.getCount() / 6);        return dollar;    }}public interface Rmb2DollarInterface {    Dollar changeRmb2Dollar(Rmb rmb);}public class Rmb {    private int count;    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }} public class Dollar {    private int count;    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }}

是不是感觉还挺简单的样子呢?


在我们实际的开发中,这个“银行”做的就是进行不兼容的类似转换的场景,他熟悉两边的情况,而两边各不认识彼此的。
就像英国的老牌绅士们,两个绅士是不会主动打招呼的,除非有第三个人认识两人,才有可能发生联系。

在我们安卓的开发过程中,也经常遇到的最常见的当然就是适配器Adapter啦。我们的ListView要的是一个个的View,但我们给Adapter送的平常都是一堆的bean,他负责去把各种bean变成各种View,说的就是下面这种情况

@Overridepublic View getView(int position, View convertView) {    final ViewHolder holder;    if (convertView == null) {        holder = new ViewHolder();        convertView = mInflater.inflate(R.layout.list_item_weather, null);        holder.tvTitle = (TextView) convertView.findViewById(R.id.dv_title_tv);        holder.tvDesc = (TextView) convertView.findViewById(R.id.dv_desc_tv);         convertView.setTag(holder);    } else {        holder = (ViewHolder) convertView.getTag();    }    DrawItem item = mList.get(position);    holder.tvTitle.setText(item.getTitle());    holder.tvDesc.setText(item.getDesc());    return convertView;}

当然了,实际我们是可以扔不同的 bean的,他只要求有统一的返回输出就好了。

0 0