您的位置:首页 > 其它

adapter设计模式

2018-03-22 16:15 155 查看
适配器模式就是将某一些对象转成我们需要的适配的对象。分为两种一种是类适配器,还有一种是对象适配器

举个例子:以前公司只支持人民币付钱,后来走向国际化支持美元

一般写法

public class RMBAdapter {
private float mRmb;

public RMBAdapter(float rmb) {
this.mRmb = rmb;
}

//获得人人民币
public float getRmb() {
return mRmb;
}

//获得美元
public float getUsd() {
return mRmb / 4f;
}
}


测试

public class Client {
public static void main(String[] args) {
RMBAdapter adapter = new RMBAdapter(800);
float rmb = adapter.getRmb();
float usd = adapter.getUsd();
System.out.println(rmb + "/" + usd);
}
}


类适配器使用

IUsedAdapter

public interface IUsdAdapter {
float getUsd();
}


RMBAdapter

public class RMBAdapter {
private float mRmb;

public RMBAdapter(float rmb) {
this.mRmb = rmb;
}

//获得人人民币
public float getRmb() {
return mRmb;
}

}


UsdApater

public class UsdAdapter extends RMBAdapter implements IUsdAdapter{
4000
private float mRmb;
public UsdAdapter(float rmb) {
super(rmb);
this.mRmb=rmb;
}

@Override
public float getUsd() {
return mRmb/4f;
}
}


测试

public class Client {
public static void main(String[] args) {
UsdAdapter adapter=new UsdAdapter(600);
float rmb = adapter.getRmb();
float usd = adapter.getUsd();
System.out.println(rmb + "/" + usd);
}
}


对象适配器只是修改了UsdAdapter

public class UsdAdapter implements IUsdAdapter {
private RMBAdapter mAdapter;
public UsdAdapter(RMBAdapter adapter) {
this.mAdapter=adapter;
}

@Override
public float getUsd() {
return mAdapter.getRmb()/4f;
}
}


测试

public class Client {
public static void main(String[] args) {
RMBAdapter rmbAdapter=new RMBAdapter(700);
UsdAdapter adapter=new UsdAdapter(rmbAdapter);
float rmb = rmbAdapter.getRmb();
float usd = adapter.getUsd();
System.out.println(rmb + "/" + usd);
}
}


2.再举个例子,做个简单的listview

Adapter接口

public interface Adapter {
//获得数量
int getCount();
//view
View getView(int position, ViewGroup parent);
}


BaseAdapter

public class BaseAdapter implements Adapter {
private List<String> mDatas;
private Context mContext;

public BaseAdapter(Context context, List<String> datas) {
this.mContext = context;
this.mDatas = datas;
}

@Override
public int getCount() {
return mDatas.size();
}

@Override
public View getView(int position, ViewGroup parent) {
TextView textView = (TextView) LayoutInflater.from(mContext).inflate(R.layout.item_main, parent,false);
textView.setText(mDatas.get(position));
return textView;
}
}


PeakmainListView继承于ScrollView

public class PeakmainListView extends ScrollView {
private LinearLayout mContainer;
private Adapter mAdapter;

public PeakmainListView(Context context) {
this(context,null);
}

public PeakmainListView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}

public PeakmainListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContainer=new LinearLayout(context);
mContainer.setOrientation(LinearLayout.VERTICAL);
addView(mContainer,0);
}

@Override
public void addView(View child) {
mContainer.addView(child);
}

public void setAdapter(BaseAdapter adapter) {
this.mAdapter = adapter;
int count = mAdapter.getCount();
for (int i = 0; i < count; i++) {
View view = mAdapter.getView(i, mContainer);
addView(view);
}
}
}


使用

mListView = (PeakmainListView) findViewById(R.id.darren_lv);
for (int i=0;i<100;i++){
items.add(i+"");
}
mListView.setAdapter(new BaseAdapter(this,items));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: