android 组合模式应用 多对象封装处理表格数据,组合模式存取数据

        多对象封装处理表格数据,组合模式读存取数据

      在实际业务处理中,常常要对数据做批量处理,比如表格,列表数据的处理

 这时可以考虑将许多数据封装为一个对象,即对象打包,再做数据批量处理

1.应用场景:

--------------------------------------------------------------------------

填入数据后:

--------------------------------------------------------------------------


转入,转出空格为EditText,日期为TextView控件

2.数据封装类

转入,转出,日期控件可以封装成一个类,放入集合中,便于取出操作:
封装的包装类: ProtocolCash.java
package com.xiebao.protocol.bean;

import android.widget.EditText;
import android.widget.TextView;

public class ProtocolCash {

	/**
	 * 协议方
	 */
	private String partner;
	private TextView dateText;

	/**
	 * 转入
	 */
	private EditText inflowEdit;
	/**
	 * 转出
	 */
	private EditText outflowEdit;

	public ProtocolCash(String partner, EditText inflowEdit,
			EditText outflowEdit) {
		super();
		this.partner = partner;
		this.inflowEdit = inflowEdit;
		this.outflowEdit = outflowEdit;
	}

	public ProtocolCash(String partner, EditText outflowEdit, TextView dateText) {
		super();
		this.partner = partner;
		this.outflowEdit = outflowEdit;
		this.dateText = dateText;
	}

	public TextView getDateText() {
		return dateText;
	}

	public void setDateText(TextView dateText) {
		this.dateText = dateText;
	}

	public String getPartner() {
		return partner;
	}

	public void setPartner(String partner) {
		this.partner = partner;
	}

	public EditText getInflowEdit() {
		return inflowEdit;
	}

	public void setInflowEdit(EditText inflowEdit) {
		this.inflowEdit = inflowEdit;
	}

	public EditText getOutflowEdit() {
		return outflowEdit;
	}

	public void setOutflowEdit(EditText outflowEdit) {
		this.outflowEdit = outflowEdit;
	}

}

3.将对象加入列表中:

在情景MainActivity类中我们这样使用:
定义集合:
	// 表格中的数据,用一个对象ProtocolCash来承载
	ArrayList<ProtocolCash> cashDataList = new ArrayList<ProtocolCash>();
集合中加入数据
	/**
	 * 表格列表
	 * 
	 * @param agreeParty
	 */
	private void showCahLayout(String fang, String agreeParty) {
		View cashView = View
				.inflate(context, R.layout.single_cash_twomodify_layout, null);

		TextView nameText = (TextView) cashView
				.findViewById(R.id.fang_name_text);
		EditText outEdit = (EditText) cashView
				.findViewById(R.id.outflow_edittext);
		TextView dateText = (TextView) cashView
				.findViewById(R.id.date_edittext);
		nameText.setText(fang);
		setDate(dateText);
		cashDataList.add(new ProtocolCash(agreeParty,outEdit,dateText));//将封装的对象加入列表
		cashListLayout.addView(cashView);
	}

4.判断数据

		//当choiceType为实时转移时,转入转出相等
		if(TextUtils.equals(choiceType, TIME_TRANSFER)){
		double sumIn = 0.00d;
		double sumOut=0.00d;
		for (ProtocolCash cash : cashDataList) {
			String inflow = cash.getInflowEdit().getText().toString().trim();//读取填入的数据
			if(!TextUtils.isEmpty(inflow)){
			sumIn+=Double.valueOf(inflow) ;    
			}
			String outflow = cash.getOutflowEdit().getText().toString().trim();//读取填入的数据
			if(!TextUtils.isEmpty(outflow)){
			sumOut+=Double.valueOf(outflow) ;  
			}
		}
		if(sumIn!=sumOut){
		  ToastUtils.show(context, "转入转出不相等");
		  return null;
		}
		}
这样已经实现了。停下来想想,貌似 有不妥的地方

-----------------------------------------------------------------------------------------------------------------

5.思考

   依据迪米特法则,一个对象应该对其他对象有最少的了解,你的内部是如何复杂和我没关系;比喻:个人隐私尽可能的少暴露,别人知道的越少越好
 自己的逻辑自己处理,尽量不要对外公布太多的public方法,减少类间的耦合,提高类的复用率, 不需要暴露的属性和方法尽量不要暴露,
       观察上面的ProtocolCash.java类,其对象的添加,获取都暴露在主类MainActivity中,是否可以不暴露,对外提供添加,获取的方法来实现,比喻:我的故事你知道的越少越好,这样我的故事改变了,可以对你没影响,便于扩展增加程序的健壮性

6.重写封装类

package com.xiebao.protocol.bean;

import java.util.ArrayList;

import android.text.TextUtils;
import android.widget.EditText;
import android.widget.TextView;

public class ProtocolCash {

	/**
	 * 协议方
	 */
	private String partner;
	private TextView dateText;

	/**
	 * 转入
	 */
	private EditText inflowEdit;
	/**
	 * 转出
	 */
	private EditText outflowEdit;

	ArrayList<ProtocolCash> cashDataList = new ArrayList<ProtocolCash>();// 新增加
																			// 声明列表

	public ProtocolCash(String partner, EditText inflowEdit,
			EditText outflowEdit) {
		super();
		this.partner = partner;
		this.inflowEdit = inflowEdit;
		this.outflowEdit = outflowEdit;
	}

	public ProtocolCash(String partner, EditText outflowEdit, TextView dateText) {
		super();
		this.partner = partner;
		this.outflowEdit = outflowEdit;
		this.dateText = dateText;
	}

	/**
	 * 获取集合对象
	 * 
	 * @return
	 */
	public ArrayList<ProtocolCash> getCashDataList() {
		return cashDataList;
	}

	public void setCashDataList(ArrayList<ProtocolCash> cashDataList) {
		this.cashDataList = cashDataList;
	}

	/**
	 * 添加数据
	 * 
	 * @param agreeParty
	 * @param outEdit
	 * @param dateText
	 */
	public void addCash(String agreeParty, EditText outEdit, TextView dateText) {
		cashDataList.add(new ProtocolCash(agreeParty, outEdit, dateText));// 将封装的对象加入列表
	}

	/**
	 * 转入转出是否相等
	 * 
	 * @return false不相等, true相等
	 */
	public boolean getIsEquality() {
		double sumIn = 0.00d;
		double sumOut = 0.00d;
		for (ProtocolCash cash : cashDataList) {
			String inflow = cash.getInflowEdit().getText().toString().trim();// 读取填入的数据
			if (!TextUtils.isEmpty(inflow)) {
				sumIn += Double.valueOf(inflow);
			}
			String outflow = cash.getOutflowEdit().getText().toString().trim();// 读取填入的数据
			if (!TextUtils.isEmpty(outflow)) {
				sumOut += Double.valueOf(outflow);
			}
		}
		if (sumIn != sumOut) {
			return false;
		} else {
			return true;
		}
	}
     //getters and setters ......

}
这样的对象的集合 的操作封装就是 组合模式,当然这里只有简单的一层树,把对对象集合的操作 封装成对象来操作
当然也可以新建一个第三方类来封装
可以参考:
Java设计模式透析之 —— 组合(Composite) - 郭霖的专栏 
点击打开链接

7.情景类调用

在MainActivity调用是这样滴:
声明对象
ProtocolCash cash=new ProtocolCash();
集合中加入数据
	/**
	 * 表格列表
	 * 
	 * @param agreeParty
	 */
	private void showCahLayout(String fang, String agreeParty) {
		View cashView = View
				.inflate(context, R.layout.single_cash_twomodify_layout, null);

		TextView nameText = (TextView) cashView
				.findViewById(R.id.fang_name_text);
		EditText outEdit = (EditText) cashView
				.findViewById(R.id.outflow_edittext);
		TextView dateText = (TextView) cashView
				.findViewById(R.id.date_edittext);
		nameText.setText(fang);
		setDate(dateText);
		cash.add(greeParty,outEdit,dateText);//将封装的对象加入列表
		cashListLayout.addView(cashView);
	}

8.判断数据

cash.getIsEquality()
 
  
组合模式降低了类间的耦合,提高了系统的健壮性

over;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值