Este artigo descreve a implementação das funções de jogo de xadrez Gozi com base no modo Xiangyuan de Java. Compartilhe -o para sua referência, como segue:
1. Definição do padrão
Aproveite o modo mundial suporta com eficiência um grande número de objetos de granulação fina de maneira compartilhada. Reduza o consumo de desempenho do sistema Criando instâncias de objetos, multiplexando objetos existentes na memória. O inglês de Xiangyuan é o peso da mosca, o que significa um objeto particularmente pequeno, ou seja, um objeto de granulação fina.
2. Exemplos do modelo
1. Análise de padrões
Emprestamos o jogo Gozi para ilustrar esse padrão.
2. Diagrama de classe estática do modo de desfrutar
3. Exemplo de código
3.1 Criação de xadrez abstrato
pacote com.demo.flyweight.Object; public abstract class abstractchessman {// coordenadas de xadrez protegidas int x; protegido int y; // categoria de xadrez (preto | branco) xadrez de cordas protegidas; public abstractChessman (string xadrez) {this.chess = xadrez; } // coordenadas de ponto Defina o ponto de vazio abstrato público (int x, int y); // Mostrar informações sobre o Chess Paper public void show () {System.out.println (this.chess + "(" + this.x + "," + this.y + ")"); }}3.2 Criando Blackchessman
pacote com.demo.flyweight.Object; public class Blackchessman estende abstractChessman { / ** * Construtor inicializa o Black Chessman * / public Blackchessman () {super ("●"); System.out.println ("-Execução de construção de Blackchessman !!!"); } // Point Coordenine Configuração @Override Public void Point (int x, int y) {this.x = x; this.y = y; // Mostrar conteúdo de xadrez show (); }}3.3 Crie Whitechessman
pacote com.demo.flyweight.Object; public class Whitechessman estende abstratachessman { / ** * construtor inicializa o Chessman branco * / public whitechessman () {super ("○"); System.out.println ("-Whitechessman Construction Exec !!!"); } // Point Coordenine Configuração @Override Public void Point (int x, int y) {this.x = x; this.y = y; // Mostrar conteúdo de peças de xadrez show (); }}3.4 Crie uma fábrica de xadrez
pacote com.demo.flyweight.factory; importar java.util.hashtable; importar com.demo.flyweight.object.abstractchessman; import com.demo.flyweight.wobject.blackchessman; import com.demo.flyweight.Object.whetechessman; public finter; FiveChessManFactory FiveChessManFactory = New FiveChessManFactory (); // cache para armazenar objetos compartilhados hashtable final hashtable <caractere, abstractChessman> cache = novo hashtable <personagem, abstractchessman> (); // Construtor de privatização Private FiveChessManFactory () {} // Obter Singleton Factory Public Static FiveChessManFactory getInstance () {return fiveChessManFactory; } / ** * Obtenha peças de xadrez baseadas em caracteres * * @param c * (b: xadrez preto: xadrez branco) * @return * / public abstratechessman getchessmanobject (char c) {// obtenha a instância do objeto de peão do cache abstracthessman abstractchessman = this.cache.get (c); if (abstractChessman == null) {// Se não houver informações de instância do objeto de peão no cache, crie a instância do objeto de peão e coloque -a no interruptor do cache (c) {case 'b': abstractChessman = new BlackChessman (); quebrar; Caso 'W': AbstractChessman = New Whitechessman (); quebrar; Padrão: quebra; } // Para impedir que os caracteres ilegais entrem null if (abstractchessman! = Null) {// coloque this.cache.put (c, abstractchessman); }} // Se houver um objeto de xadrez no cache, retorne diretamente abstratoChessman; }}3.5 Implementação do cliente
pacote com.demo; importar java.util.random; importar com.demo.flyweight.factory.fiveChessManFactory; importar com.demo.flyweight.object.abstractchessman;/** ** ** * Application * * @Author */public class Client {** ** * @Param args */public. FIFENTCHESSMANFACTIAL FIVERCIONAL FIVECHESMANFACTORY = FIVECHESSMANFACTORY .GETINSTANCE (); Aleatório aleatório = novo aleatório (); int radom = 0; AbstractChessman AbstractChessman = NULL; // Obtenha a peça de xadrez para (int i = 0; i <10; i ++) {radom = aleatom.nextInt (2); Switch (Radom) {// Obtenha o caso de xadrez preto 0: AbstractChessman = FiveChessManFactory.getChessManObject ('B'); quebrar; // Obtenha o caso de xadrez branco 1: abstractChessman = fiveChessManFactory.getChessmanObject ('W'); quebrar; } if (abstractChessman! = null) {abstractChessman.point (i, aleatom.nextint (15)); }}}}4. Resultados da operação
-Whitechessman Construction Exec !!!
○ (0,2)
○ (1,6)
-BlackChessman Construction Exec !!!
● (2,3)
○ (3,14)
○ (4,13)
○ (5,8)
● (6,14)
● (7,0)
● (8,3)
○ (9,8)
3. Dois estados do modo de aproveitamento
Estado intrínseco : não mudará com a mudança do ambiente, é armazenado nas informações de estado internas do objeto entrínse. Este estado intrínseco pode ser compartilhado. Para qualquer objeto entrínse, seu valor é exatamente o mesmo. Assim como as "peças pretas" e "peças brancas" em Goji, o estado em que representa é o estado interno.
Estado externo : mudará com a mudança do ambiente, para que não possa compartilhar o estado. Para diferentes objetos do gênero, seus valores podem ser diferentes. O estado externo do objeto Xiangyuan deve ser salvo pelo cliente. Depois que o objeto Xiangyuan for criado e precisa ser usado, ele será passado para o objeto Xiangyuan. Assim como as informações de posição de Gozi, o estado representado é o estado externo do objeto da ecologia.
Portanto, os estados externos e internos de Xiangyuan são dois estados independentes e não têm conexão entre si.
4. Princípios de design deste modelo
1. Compartilhe objetos de granulação fina para reduzir o espaço da memória.
2. Isole efetivamente as partes alteradas e as partes inalteradas do sistema.
5. Use ocasiões
1. Quando há muitas instâncias de um determinado tipo de objeto no sistema.
2. No design do sistema, após classificar as instâncias dos objetos, é hora de descobrir que existem poucas categorias distintas.
6. Diagrama de classe estática do modo de desfrutar
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.