Inserir novo método ou alterar atributo?

A minha dúvida é bem básica:
Suponha que tenha uma classe graavadora de imagens

[code]class GravaImg{
Object img;

public void salvar(java.io.FileOutputStream out) throws IOException{
    Utilidades.criaPng(out, img, 550, 400);
}

}[/code]

e tenha de implementar um modo de alterar o tamanho de gravação, mas conservar um default

seria melhor:
*Re-criar um método:

[code]lass GravaImg{
Object img;

public void salvar(java.io.FileOutputStream out) throws IOException{
    Utilidades.criaPng(out, img, 550, 400);
}
public void salvar(java.io.FileOutputStream out,int width,int height) throws IOException{
    Utilidades.criaPng(out, img, width, height);
}

}[/code]

*Ou alterar em atributos:

[code]class GravaImg{
Object img;
private int width = 550;
private int height = 400;

public void salvar(java.io.FileOutputStream out,int width,int height) throws IOException{
    Utilidades.criaPng(out, img, this.width, this.height);
}

public void setTamanho(int w, int h){
    this.width = w;
    this.height = h;
}

}[/code]

Tem diferença quanto a desempenho, legibilidade, flexibilidade?
Qual o padrão?
Quando usar qual modelo?

Se o valor “default” não muda, acho que não há necessidade de manter um campo. Se desejar que ele mude, daí vai ser útil. Mas não consigo ver nenhuma mudanda consideravel de perforamance.

[]`s

Mesmo sem armazenar um campo, criar uma constante estatica com os valores defaut ajuda na legibilidade. Usando campos, substituir nomes como width e height por defautWidth e defautHeight ajuda um pouco também. Mais não são prioridades, e não fazem lá tanta diferença.

Desempenho? Não há diferença.

Legibilidade? Ambos são legíveis quanto ao que fazem.

Flexibilidade? Ruim.

Qual o padrão? Não tem.

Quando usar qual modelo? Eu prefero utilizar variáveis de instância, pois as dimensões default são atributos do seu objeto. Além disso, apenas um método salvar iria invocar o criaPng. O método salvar seria sobrecarregado, sendo aquele que utiliza os valores default os passaria àquele que invocaria o criaPng.

Só não entendi pra que a classe GravaImg se ela só chama um método utilitário…

é apenas um exemplo…

A dúvida era quando usar qual técnica pra resolver meu problema.

Realmente essa classe teria inúmeros métodos, e no caso de criar o método salva é para encapsular, simplificando a tarefa a ser realizada com objeto, escondendo as bibliotecas que utilizo em seus inúmeros processos.