博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——装饰者(Decorator)模式DEMO——游戏角色的装饰者模式实现
阅读量:2036 次
发布时间:2019-04-28

本文共 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/

你可能感兴趣的文章
threading.local
查看>>
flask上下文
查看>>
Linux的SOCKET编程详解
查看>>
setsid()函数的作用
查看>>
每天进步一点点——Linux中的线程局部存储(二)
查看>>
【C++】explicit关键字
查看>>
八大排序算法
查看>>
C++ 11
查看>>
Spring @Configuration 和 @Component 区别
查看>>
JVM内存模型
查看>>
syslog日志记录
查看>>
Linux下的动态库.so
查看>>
jQuery解决input中placeholder值在ie中无法支持的问题
查看>>
一文深度揭秘Redis的磁盘持久化机制
查看>>
java是编译型还是解释型语言
查看>>
Spring的BeanUtils的copyProperties方法需要注意的点
查看>>
NotePad 常用快捷键总结
查看>>
Notepad++如何让打开的文件排在左边菜单栏
查看>>
File类的常用方法【二】
查看>>
为什么说栈的速度快,堆的速度慢?栈和堆的区别是什么?
查看>>