标签:功能 委托 desc 王者荣耀 结构图 成员 有一个 cti gate
王者荣耀中,角色的"伤害值"和"生命值"是很重要的概念。为了保证游戏的胜利,玩家会通过在游戏开始前配置合适的游戏铭文,在游戏中积累经济购买装备的方式来提升英雄角色的伤害值和生命值。
装饰者模式(Decorator Pattern)是一种比较常见的模式,装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案
装饰者模式所涉及的模式有:
● Component抽象构件:Component是一个接口或者是一个抽象类,就是定义我们最核心的对象,也就是最原始的对象(在装饰模式中,必然有一个最基本,最核心,最原始的接口或抽象类充当Component抽象构件)。
● ConcreteComponent具体构件:ConcreteComponent是最核心,最原始,最基本的接口或抽象类的实现,你要装饰的就是它。
● Decorator装饰角色:一般是一个抽象类,用来实现接口或抽象方法
● ConcreteDecorator是具体类的装饰类,把最原始,最核心,最基本的东西装饰成其他东西
Hero(Component抽象构件类)
package com.practice.Domain;
/*
*Component抽象构件类
*@param heroHurt 英雄伤害值
*@parem HeroLife 英雄生命值
*/
public abstract class Hero {
String description = "Unknown Hero";
public String getDescription() {
return description;
}
public abstract double heroHurt();
public abstract double heroLife();
}
HouYi(ConcreteComponent具体构件)
package com.practice.Domain;
public class HouYi extends Hero {
/*
* ConcreteComponent具体构件:ConcreteComponent是最核心,最原始,最基本的接口或抽象类的实现
*/
public HouYi() {
description = "后羿";
}
public double heroHurt() {
return 300;
}
public double heroLife() {
return 3000;
}
}
Decorate类(Decorator装饰角色)
package com.practice.Decorator;
import com.practice.Domain.Hero;
/*
*Decorate类( Decorator装饰角色)
*/
public abstract class Decorator extends Hero{
public abstract String getDescription();
}
FengBao类(铭文:风暴——具体类的装饰类)
package com.practice.Device;
import com.practice.Decorator.Decorator;
import com.practice.Domain.Hero;
/*
* FengBao类(铭文:风暴——具体类的装饰类)
* 增加伤害值
*/
public class FengBao extends Decorator{
Hero hero;
public FengBao(Hero hero) {
this.hero = hero;
}
public String getDescription() {
return "->装备风暴铭文,增加0.5%暴击效果<-\n";
}
public double heroHurt() {
return (1+0.05)*hero.heroHurt();
}
public double heroLife() {
return hero.heroLife()+0;
}
}
PoJun类(装备:破军——Decorator装饰角色)
package com.practice.Device;
import com.practice.Decorator.Decorator;
import com.practice.Domain.Hero;
/*
* PoJun类(装饰角色)
* 增加英雄伤害值
*/
public class PoJun extends Decorator{
Hero hero;
public PoJun(Hero hero) {
this.hero = hero;
}
public String getDescription() {
return hero.getDescription() + "->购买装备破军,增加150物理攻击<-\n";
}
public double heroHurt() {
return hero.heroHurt() + 150;
}
public double heroLife() {
return hero.heroLife() + 0;
}
}
BaZheZhongZhuang(装备:霸者重装——Decorator装饰角色)
package com.practice.Device;
import com.practice.Decorator.Decorator;
import com.practice.Domain.Hero;
/*
* BaZheZhongZhuang类
* 增加英雄生命值
*/
public class BaZheZhongZhuang extends Decorator
{
Hero hero;
public BaZheZhongZhuang(Hero hero) {
this.hero = hero;
}
public String getDescription() {
return hero.getDescription() + "->购买霸者重装,生命值提升2000<-\n";
}
public double heroHurt() {
return hero.heroHurt() + 0;
}
public double heroLife() {
return hero.heroLife() + 2000;
}
}
Test(测试类)
package com.practice.Test;
import com.practice.Device.BaZheZhongZhuang;
import com.practice.Device.FengBao;
import com.practice.Device.PoJun;
import com.practice.Domain.Hero;
import com.practice.Domain.HouYi;
/*
* 测试类
*/
public class Test {
public static void main(String[] args) {
Hero Houyi = new HouYi();
System.out.println(Houyi.getDescription() + "基础伤害:" + Houyi.heroHurt());
System.out.println(Houyi.getDescription() + "基础生命值:" + Houyi.heroLife());
Houyi = new FengBao(Houyi);
Houyi = new PoJun(Houyi);
Houyi = new BaZheZhongZhuang(Houyi);
System.out.println(Houyi.getDescription() + "伤害值" + Houyi.heroHurt());
System.out.println("生命值" + Houyi.heroLife());
}
}
运行结果:
标签:功能 委托 desc 王者荣耀 结构图 成员 有一个 cti gate
原文地址:https://www.cnblogs.com/miaowulj/p/11862667.html