![]()
package com.demo;
public interface IFunction {
// 装饰角色的方法
String decorate();
// 移动角色方法
String move();
// 发动技能的方法
String skill();
}
package com.demo.role;
import com.demo.IFunction;
/**
* 法师角色类
* @author Administrator
*
*/
public class Magic implements IFunction {
public String decorate() {
return "法师";
}
@Override
public String move() {
// TODO Auto-generated method stub
return null;
}
@Override
public String skill() {
// TODO Auto-generated method stub
return null;
}
}
package com.demo.role;
import com.demo.IFunction;
public class Hunter implements IFunction {
@Override
public String decorate() {
return "猎人";
}
@Override
public String move() {
// TODO Auto-generated method stub
return null;
}
@Override
public String skill() {
// TODO Auto-generated method stub
return null;
}
}
package com.demo.decorator;
import com.demo.IFunction;
/**
* 所有具体装饰类的父类
* @author Administrator
*
*/
public abstract class AbstractDecorator implements IFunction {
private IFunction target;
public AbstractDecorator(IFunction target) {
this.target = target;
}
@Override
public String decorate() {
return target.decorate();
}
@Override
public String move() {
// TODO Auto-generated method stub
return null;
}
@Override
public String skill() {
// TODO Auto-generated method stub
return null;
}
}
package com.demo.decorator.hair;
import com.demo.IFunction;
import com.demo.decorator.AbstractDecorator;
/**
* 头发的装饰类
* @author Administrator
*
*/
public class HairDecoration extends AbstractDecorator {
public HairDecoration(IFunction target) {
super(target);
}
@Override
public String decorate() {
return super.decorate() + "装饰上了头发";
}
}
package com.demo.decorator.jacket;
import com.demo.IFunction;
import com.demo.decorator.AbstractDecorator;
public class JacketDecoration extends AbstractDecorator {
public JacketDecoration(IFunction target) {
super(target);
}
@Override
public String decorate() {
return super.decorate() + "穿上了上衣";
}
}
package com.demo.decorator.plant;
import com.demo.IFunction;
import com.demo.decorator.AbstractDecorator;
public class PlantDecoration extends AbstractDecorator {
public PlantDecoration(IFunction target) {
super(target);
}
@Override
public String decorate() {
return super.decorate() + "穿上了裤子";
}
}
package com.demo.decorator.shoe;
import com.demo.IFunction;
import com.demo.decorator.AbstractDecorator;
public class ShoeDecoration extends AbstractDecorator {
public ShoeDecoration(IFunction target) {
super(target);
}
@Override
public String decorate() {
return super.decorate() + "穿上了鞋子";
}
}
package com.test;
import com.demo.IFunction;
import com.demo.decorator.hair.HairDecoration;
import com.demo.decorator.jacket.JacketDecoration;
import com.demo.decorator.plant.PlantDecoration;
import com.demo.decorator.shoe.ShoeDecoration;
import com.demo.role.Hunter;
import com.demo.role.Magic;
public class TestDecorationDemo {
public static void main(String[] args) {
IFunction target = new Magic();
System.out.println(target.decorate());
target = new JacketDecoration(target);
System.out.println(target.decorate());
/*target = new HairDecoration(target);
System.out.println(target.decorate());*/
target = new PlantDecoration(target);
System.out.println(target.decorate());
target = new ShoeDecoration(target);
System.out.println(target.decorate());
// 使用装饰模式
IFunction hunter = new HairDecoration(new JacketDecoration(new ShoeDecoration(new Hunter())));
System.out.println(hunter.decorate());
}
}