Melhores praticas criação adapter

Bom dia pessoas!!

pessoal estou mexendo na minha aplicação aqui e senti a necessidade de criar um adapter mais performatico e queria saber de vc’s quais são as melhores praticas para criar um adapter performatico?

o problema do meu adapter é que ele tem que ser genérico para um mesmo objeto ou seja eu posso exibir atributos diferentes do mesmo objeto para cada usuário.

ex: Cliente

o cliente possui, nome fantasia, razão social, CNPJ, inscrição estadual, código, endereço… etc.

para o usuário 1 é exibido na lista o nome fantasia e o código.

para o usuário 2 é exibido na lista a razão social, o código e o CNPJ.

a ideia inicial que eu tive depois de pesquisar algumas coisas foi criar uma interface como mostrado abaixo.

package util.adapter.AdapterUtil;

import android.view.View;
import domain.Cliente;
import util.adapter.ViewHolder;

public interface IConfiguracaoViewAdapter {
	
	public View buildView(Object object, View view, ViewHolder holder);
	
	public View buildViewCliente(Cliente cliente, View view, ViewHolder holder);

}

e implementei essa interface em uma classe default

package util.adapter.AdapterUtil;

import android.view.View;
import android.widget.TextView;
import domain.Cliente;
import util.adapter.ViewHolder;

public class ConfiguracaoViewAdapterDefault implements IConfiguracaoViewAdapter{

	@Override
	public View buildView(Object object, View view, ViewHolder holder) {
		if (object instanceof Cliente) {
			return buildViewCliente(((Cliente)object), view, holder);
		}
		return null;
	}
	
	@Override
	public View buildViewCliente(Cliente cliente, View view, ViewHolder holder) {
		if (holder == null) {
			holder = new ViewHolder();
			TextView tvCodigo = (TextView) view.findViewById(R.list_cliente_id.txtCodigo);
			TextView tvNomeCliente = (TextView) view.findViewById(R.list_cliente_id.txtNome);
			holder.setProperty(tvCodigo, "codigo");
			holder.setProperty(tvNomeCliente, "nomeCliente");
			view.setTag(holder);
		} 

		((TextView)holder.getProperty("codigo")).setText(cliente.getCodigo());
		((TextView)holder.getProperty("nomeCliente")).setText(cliente.getNomeCliente());
		
		return view;
	}

}

e para usuários específicos eu estendo a nova classe da classe default e mudo os atributos que eu quero e chamo essa classe dentro do getView().

alguém tem alguma dica ou algum exemplos sobre isso?

ahh esqueci, eu estou usando o ArrayAdapter, é melhor usar esse ou outros tipos como o baseAdapter?