Modo Flyweight: Através da tecnologia de compartilhamento, ele pode efetivamente suportar um grande número de objetos de granulação fina.
O modo Aproveitar Yuan é dividido em simples modo de desfrutar do modo Yuan e composto, desfrute do modo Yuan em "Java and Mode" de Yan Hong. O composto desfrutar de Yuan no modo composto não pode ser compartilhado. A chave para compartilhar o objeto Gostar Yuan é distinguir entre estados internos e externos. Esses dois "congruentes" são muito difíceis de entender. Não estou dizendo que a tradução não é boa, mas talvez minha capacidade de compreensão seja ruim, ou a versão de tradução de "elementos de padrão de design do software reutilizável orientado a objetos" é traduzido em objetos internos e externos. É relativamente direto e parece estranho com o cheiro literário de coisas conceituais que são fortes demais. Os caracteres aqui também usam a instrução "básicos do software orientado a objetos reutilizáveis em padrões de design", que não distingue entre modos simples e modos compostos, mas possui um peso-intencional não compartilhado (em "java e modo", indica que o desfrute composto não pode ser compartilhado). Dizemos aqui que não pode compartilhar papéis de prazer. Dessa forma, os personagens no modo de aproveitamento incluem:
O diagrama institucional da classe do modelo Xiangyuan é o seguinte:
Ao usar o padrão de enciclopédia em java.lang.string design, sabemos que as seqüências de strings em Java são sempre compartilhadas, como o seguinte snippet de código:
String m = "a"; string n = "a"; system.out.println (m == n);
Isso será gerado verdadeiro, indicando que M e N apontam para a mesma instância, e há apenas um "A" na memória. É assim que o modo Aproveitar Yuan é usado na string.
O uso do modo Xiangyuan no processo de edição e armazenamento de texto. Aqui, supõe -se que o artigo seja composto de objetos de linha e os objetos de linha sejam compostos de vários objetos de caracteres. No entanto, se cada caractere salvar seu próprio objeto, uma postagem possui milhares de objetos de caracteres, o que consome seriamente a memória do sistema e causa o tempo de execução inaceitável. O bom método é usar o modo Xiangyuan para salvar apenas valores de codificação de caracteres ASCII, como um estado interno imutável, compartilhar os objetos de caracteres e formatar dados como a cor e o tamanho relativos do caractere são mantidos pelo cliente e podem ser transmitidos de fora durante o tempo de execução. Cada linha é um objeto universal não compartilhado, que é composto por um objeto universal (objeto de caractere).
Vamos dar uma olhada em um exemplo de uma estrutura simples do padrão de enciclopédia:
/ *** letra*/ letra de classe pública {nome da string privada; letra pública (nome da string) {this.name = name; } public string getName () {return name; }} / ** * Uma fábrica Xiangyuan (fábrica de singleton) que gera objetos de carta */ classe pública LetterFactory {private mapa <string, letra> mapa; Instância de Letterfactory estática privada = new LetterFactory (); private LetterFactory () {map = new Hashmap <String, letter> (); } public static letterfactory getInstance () {retorna instância; } public void add (letra da carta) {if (letra! = null &&! map.containsKey (letter.getName ())) {map.put (letter.getName (), letra); } System.out.println ("map.size ====" + map.size ()); } letra pública get (nome da string) {return map.get (nome); }} public class Test {public static void main (string [] args) {letterFactory Factory = letterFactory.getInstance (); String word = "facilidade"; addletterbyName (fábrica, palavra); getletter (fábrica, palavra); } // Adicione o objeto de letra estática void addletterByName (fábrica de letterfactory, string word) {for (char c: word.toCharArray ()) {factory.add (nova letra (c + ""))); }} // output letter objeto estático void getLeTter (fábrica letterfactory, string word) {for (char c: word.toCharArray ()) {System.out.println (factory.get (c + "")); }}}Imprimir:
map.size ==== 1 map.size ==== 2 map.size ==== 2 map.size ==== 3 map.size ==== 4 map.size ==== 5 map.size ===== 5 Flyweight.Letter@3343B3 Flyweight.Ter@272D7A1010 flyweight.letter@1aa8c488 flyweight.letter@3dfeca64 mosca flyweight.letter@22998b08 Flyweight.Letter@1AA8C488