装饰设计模式

 

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());
        
    }
}

 

posted @ 2019-03-10 23:07  ^sun^  阅读(255)  评论(0)    收藏  举报