模版方法模式
来源:互联网 发布:linux oracle 自启动 编辑:程序博客网 时间:2024/06/07 17:01
作用
把都需要实现的上放到抽象父类中,具体细节交给子类实现;实现了代码的复用;
Demo
以常用的listview的adapter举例
//把通用操作抽取到抽象父类中public abstract class MyBaseAdapter<T> extends BaseAdapter { Context mContext; List<T> mDatas; LayoutInflater mLayoutInflater; public MyBaseAdapter(Context context, List<T> datas) { mContext = context; mDatas = datas; mLayoutInflater=LayoutInflater.from(context); } @Override public int getCount() { return mDatas!=null?mDatas.size():0; } @Override public T getItem(int position) { return mDatas!=null?mDatas.get(position):null; } @Override public long getItemId(int position) { return position; } @Override public abstract View getView(int position, View convertView, ViewGroup parent); //datas相关 public void setDatas(List<T> datas){ mDatas=datas; notifyDataSetChanged(); } public void clearDatas(){ mDatas=null; notifyDataSetChanged(); } public void appendDatas(List<T> datas){ if (mDatas==null)mDatas=new ArrayList<>(); mDatas.addAll(datas); } public void appendDatas(T data){ if (mDatas==null)mDatas=new ArrayList<>(); mDatas.add(data); }}
public abstract class CommonAdapter<T,H> extends MyBaseAdapter<T> { public CommonAdapter(Context context, List<T> datas) { super(context, datas); } @Override public View getView(int position, View convertView, ViewGroup parent) { T data = mDatas.get(position); H holder=null; if (convertView==null){ convertView=createConvertView(mLayoutInflater,position,parent,getItemViewType(position)); holder=createViewHolder(convertView,data,position); convertView.setTag(holder); }else{ holder= (H) convertView.getTag(); } bindDatas(holder,data,position); return convertView; } public abstract View createConvertView(LayoutInflater layoutInflater, int position, ViewGroup parent, int itemViewType); public abstract H createViewHolder(View convertView, T data, int position); protected abstract void bindDatas(H holder, T data, int position);}
//细节由子类实现public class CommonAdapterDEMO extends CommonAdapter<String, CommonAdapterDEMO.Holder > { public CommonAdapterDEMO(Context context, List datas) { super(context, datas); } @Override public View createConvertView(LayoutInflater layoutInflater, int position, ViewGroup parent, int itemViewType) { View layout = layoutInflater.inflate(android.R.layout.simple_list_item_1, parent, false); return layout; } @Override public Holder createViewHolder(View convertView, String data, int position) { return new Holder(convertView); } @Override protected void bindDatas(Holder holder, String data, int position) { holder.tv.setText(data); } class Holder { TextView tv; public Holder(View view) { tv= (TextView) view.findViewById(android.R.id.text1); } }}
阅读全文
0 0
- 模版方法模式
- 模版方法模式
- 七、模版方法模式
- 模版方法设计模式
- java 模版方法模式
- 模版方法模式
- 模版方法模式
- 模版方法模式
- 7.模版方法模式
- 模版方法模式
- java 模版方法模式
- 模版方法设计模式
- 模版方法模式
- java 模版方法模式
- 模版方法模式
- 模版方法模式
- 模版方法模式
- 模版方法模式
- ES6函数扩展
- linux crontab定时执行工具
- Codeforces Round #306 (Div. 2) B. Preparing Olympiad (状态压缩)
- LCD19264液晶控制笔记
- Ubuntu系统备份、在移动硬盘上恢复系统及问题解决
- 模版方法模式
- CSS_01
- 安装(2)
- 【JavaSE_学习笔记】字节流
- plsq登陆oracl数据库用户被锁处理
- dubbo-admin编译笔记
- 欢迎使用CSDN-markdown编辑器
- 数理逻辑习题集(5)
- 手动构建rootfs及文件功能分析