Padrões de Design Java: Padrão Flyweight

O que é o modo flyweight

O modo Flyweight, também conhecido como modo Flyweight, é um dos modos estereotipados, que reduz o uso de memória ao compartilhar dados com outros objetos semelhantes.

Etapas de implementação

  • Crie uma classe de entidade,
public class MyCharacter {
    
    
	private char mychar;
	
	public MyCharacter(char mychar) {
    
    
		this.mychar = mychar;
	}
	
	public void display() {
    
    
		System.out.println(mychar);
	}
}
  • Crie uma fábrica que produza objetos de classes de entidade com base nas informações fornecidas.
public class MyCharacterFactory {
    
    
	private Map<Character,MyCharacter> pool;
	
	public MyCharacterFactory() {
    
    
		pool = new HashMap<Character,MyCharacter>();
	}
	
	public MyCharacter getMyCharacter(Character character) {
    
    
		MyCharacter myChar = pool.get(character);
		if(myChar == null) {
    
    
			myChar = new MyCharacter(character);
			pool.put(character, myChar);
		}
		return myChar;
	}
}

  • Antes de criarmos um objeto é um novo direto, como:
MyCharacter myChar1 = new MyCharacter('a');
MyCharacter myChar2 = new MyCharacter('b');
MyCharacter myChar3 = new MyCharacter('a');
MyCharacter myChar4 = new MyCharacter('d');
  • Mas descobrimos que os dados de 1 e 3 são os mesmos, então podemos usar o modo Flyweight para obter objetos da fábrica. A fábrica julgará se existem objetos com os mesmos dados de acordo com os dados do objeto. Se houver retorno direto, sem recriação
public class MainClass {
    
    

	public static void main(String[] args) {
    
    	
		MyCharacterFactory factory = new MyCharacterFactory();
		
		
		MyCharacter myChar1 = factory.getMyCharacter('a');
		MyCharacter myChar2 = factory.getMyCharacter('b');
		MyCharacter myChar3 = factory.getMyCharacter('a');
		MyCharacter myChar4 = factory.getMyCharacter('d');
		
		myChar1.display();
		myChar2.display();
		myChar3.display();
		myChar4.display();
		
		if(myChar1 == myChar3) {
    
    
			System.out.println("true");
		} else {
    
    
			System.out.println("false");
		}
	}

}

Acho que você gosta

Origin blog.csdn.net/qq_40042726/article/details/122141148
Recomendado
Clasificación