O padrão do decorador pode adicionar dinamicamente algumas responsabilidades extras a um objeto. Em termos de adição de funções, o modo decorador é mais flexível do que gerar subclasses.
O ambiente aplicável para este modo é:
(1) Adicione responsabilidades a um único objeto de maneira dinâmica e transparente sem afetar outros objetos.
(2) lidar com as responsabilidades que podem ser revogadas.
(3) Quando o método de geração de subclasses não pode ser usado para expansão. Um cenário é que pode haver um grande número de extensões independentes, que produzirão um grande número de subclasses para suportar cada combinação, fazendo com que o número de subclasses exploda. Outro caso pode ser porque a definição de classe está oculta ou a definição de classe não pode ser usada para gerar subclasses.
Etapas -chave para implementar este modo:
(1) Componente (a classe base do objeto decorado): define a interface do objeto, que pode adicionar dinamicamente responsabilidades a esses objetos;
(2) concretecomponente (objeto decorativo específico): define um objeto específico, e o decorador pode adicionar responsabilidades adicionais a ele;
(3) decorador (classe de abstrato do decorador): mantém uma referência à instância do componente e define uma interface consistente com o componente ( isto é, para herdar ou implementar a classe base do objeto decorado );
(4) Concretedecorator: um objeto decorativo específico, adicionando responsabilidades específicas aos objetos decorativos específicos mantidos internamente;
Isso pode ser um pouco difícil para todos entender, então ainda estamos quietos:
Depois do inverno, o tempo ficou cada vez mais frio. Depois de sair do trabalho, como veterano gastronômico, seria ótimo ter uma consulta com dois ou três amigos para ter um banquete quente. Falando em panela quente, tenho que mencionar a panela Dalong Hot que comi em Chengdu, com todos os tipos de calças de panela e pratos acompanhados, mas o meu favorito é o fundo original da panela de panela Dalong, carne picante, tripa de dadao, salsicha de Tianwei, tuotuo, costela de porco picante, etc., eu posso mesmo que eu possa até mesmo ficar com drroz quando eu posso pensar.
Quando se trata disso, você deve se sentir um pouco sobre isso. O fundo da panela mencionado acima é na verdade a base do objeto decorativo . Os ingredientes são na verdade o objeto abstrato decorativo . Os fundos específicos da panela do fundo da panela original Dalong Pot Original são os objetos decorativos específicos. Os vários acompanhamentos usados para decorar o fundo da panela são os objetos decorativos específicos . Falando nisso, todos deveriam ter percebido de repente. Vamos iniciar a implementação específica de código:
Etapa 1: Defina a classe base do objeto decorado (pode ser classe ou interface abstrata)
interface pública guodi {public float Cost (); //, é claro, o fundo da panela precisa ter preços públicos nome de string (); // o nome também deve estar disponível} Etapa 2: Defina o objeto decorativo específico (ou seja, vários fundos de maconha, dois são definidos aqui)
classe pública yuanyang implementa Guodi {@Override public float Cost () {return 48.0f; } @Override public String name () {return "Double Pot Base"; }} classe pública Dalongyan implementa Guodi {@Override public float Cost () {return 59.0f; } @Override public string name () {return "Dalong Hot Pot Original Pot Base"; }}Etapa 3: Defina a classe abstrata do decorador
classe abstrata pública Peicai implementa Guodi {Private Guodi Guodi; public FoodDecorator (Guodi Guodi) {super (); this.guodi = guodi; } @Override public float Cost () {return guodi.cost (); } @Override public String name () {return guodi.name (); }}Etapa 4: Defina o objeto decorador específico
classe pública Malaniurou estende peicai {public malaniurou (guodi guodi) {super (guodi); } @Override public float Cost () {return super.Cost ()+46f; } @Override public string name () {return super.name ()+"+carne picante"; }} classe pública Maodu estende Peicai {public maodu (guodi guodi) {super (guodi); } @Override public float Cost () {return super.cost ()+30f; } @Override public string name () {return super.name ()+"+big knife tripe"; }}Classe de teste:
Public class Test {public static void main (string [] args) {guodi guodi = new dalongyan (); // Encomende um pote de panela de panela quente de Dalong Malaniurou y = novo malaniurou (Guodi); // Obtendo bonde picante maodu x = novo (y); // cesto de um grande sistema ordens "+x.name ()+", consume "+s.cost ()); }}Resultado da saída:
1. Um total de um ponto de panela original de Dalong Hotpot + carne picante + tripa de dadao foi encomendada e um total de 135 foi consumido
O exposto acima é o modelo de decorador Java apresentado pelo editor (entendendo o princípio do código de uma perspectiva da vida real). Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!