当前位置: 萬仟网 > IT编程>软件设计>设计模式 > 设计模式——装饰者(Decorator)模式DEMO——游戏角色的装饰者模式实现

设计模式——装饰者(Decorator)模式DEMO——游戏角色的装饰者模式实现

2020年11月19日  | 萬仟网IT编程  | 我要评论
问题描述游戏中,角色Character可以有属性attack, defence,可以有装备weapen, armour,可以对属性造成影响,它们可以是类的属性;可以随时变成巨人gigantize,可以变狂暴furious,都可以对attack和defence形成影响,它们可以形成装饰。解决方案参考文章...

问题描述

游戏中,角色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://blog.csdn.net/weixin_43272781/article/details/109809629

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
Copyright © 2017-2020  萬仟网 保留所有权利. 粤ICP备17035492号-1