本文共 1945 字,大约阅读时间需要 6 分钟。
游戏中,角色Character可以有属性attack, defence,可以有装备weapen, armour,可以对属性造成影响,它们可以是类的属性;可以随时变成巨人gigantize,可以变狂暴furious,都可以对attack和defence形成影响,它们可以形成装饰。
package io.shentuzhigang.demo.design;import org.junit.jupiter.api.Test;/** * @author ShenTuZhiGang * @version 1.0.0 * @date 2020-11-19 14:22 */public class DecoratorTEST{ @Test public void t(){ Character person = new ConcreteCharacter(); Decorator decorator = new Gigantize( new Person(person)); decorator.weapen(); decorator.armour(); }}interface Character { public void weapen(); public void armour();}class ConcreteCharacter implements Character{ @Override public void weapen() { System.out.println("ConcreteCharacter+weapen"); } @Override public void armour() { System.out.println("ConcreteCharacter+armour"); }}abstract class Decorator implements Character{ private Character character; public Decorator(Character character){ this.character = character; } String attack; String defence; @Override public void weapen() { this.character.weapen(); } @Override public void armour() { this.character.armour(); }}class Person extends Decorator { public Person(Character character) { super(character); } @Override public void weapen() { super.weapen(); System.out.println("Person+weapen"); } @Override public void armour() { super.armour(); System.out.println("Person+armour"); }}class Gigantize extends Decorator { public Gigantize(Character character) { super(character); } public void furious(){ System.out.println("furious"); } @Override public void weapen() { super.weapen(); System.out.println("Gigantize+weapen"); } @Override public void armour() { super.armour(); System.out.println("Gigantize+armour"); }}
转载地址:http://xiwof.baihongyu.com/