問題描述
游戲中,角色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");
}
}
運行結果

參考文章
設計模式之裝飾者模式(實體+Demo)
JAVA設計模式初探之裝飾者模式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225442.html
標籤:其他
上一篇:用C#控制臺寫飛行棋(第一篇)
下一篇:關于輸出中空格的控制
