装饰者模式:在不改变原有类的功能的情况下实现对其功能的加强或者新增。
具体方法:通过构造方法实现增强。
我们简单来举一个例子,写一个简单的游戏模式:
首先,建一个父类:
public abstract class Hero {
//基础属性
static int attack=5;//攻击力
static int guard=5;//护甲
static int banmagic=5;//魔抗
public abstract void heroInfo();
}
然后,建一个英雄类继承他:
public class StupidHero extends Hero{
@Override
public void heroInfo() {
System.out.println("攻击力:"+super.attack+"护甲:"+super.guard+"魔抗:"+super.banmagic);
}
}
建一个装备类:
public class Item extends Hero{
private Hero hero;
public Item(Hero hero) {
// TODO Auto-generated constructor stub
this.hero=hero;
}
@Override
public void heroInfo() {
// TODO Auto-generated method stub
}
}
分别的三件装备:
public class Sword extends Item{
public Sword(Hero hero) {
super(hero);
// TODO Auto-generated constructor stub
super.attack+=5;
addAttack(super.attack);
}
public void addAttack(int attack){
System.out.println("装备剑以后攻击力提高为:"+attack);
System.out.println("攻击力:"+super.attack+"护甲:"+super.guard+"魔抗:"+super.banmagic);
}
}
public class Brace extends Item{
public Brace(Hero hero) {
super(hero);
// TODO Auto-generated constructor stub
super.guard+=5;
addGuard(super.guard);
}
public void addGuard(int guard){
System.out.println("装备盔甲以后攻击力提高为:"+guard);
System.out.println("攻击力:"+super.attack+"护甲:"+super.guard+"魔抗:"+super.banmagic);
}
}
public class Cape extends Item{
public Cape(Hero hero) {
super(hero);
// TODO Auto-generated constructor stub
super.banmagic+=5;
addBanmagic(super.banmagic);
}
public void addBanmagic(int banmagic){
System.out.println("装备斗篷以后攻击力提高为:"+banmagic);
System.out.println("攻击力:"+super.attack+"护甲:"+super.guard+"魔抗:"+super.banmagic);
}
}
测试类:
public class Test {
public static void main(String[] args) {
StupidHero hero = new StupidHero();
hero.heroInfo();
Sword sword = new Sword(hero);
Brace brace = new Brace(hero);
Cape cape = new Cape(hero);
}
}