欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-19 14:55:59
问题描述游戏中,角色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");
    }
}

运行结果

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

参考文章

设计模式之装饰者模式(实例+Demo)

JAVA设计模式初探之装饰者模式

本文地址:https://blog.csdn.net/weixin_43272781/article/details/109809629