java设计模式进阶_property

来源:互联网 发布:淘宝免费开店步骤 编辑:程序博客网 时间:2024/06/08 20:11

这里写图片描述

//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Prototype.java//  @ Date : 2016/9/1//  @ Author : ////public interface Prototype {    public Integer get(Stats stats);    public boolean has(Stats stats);    public void set(Stats stats, Integer val);    public void remove(Stats stats);}import java.util.HashMap;import java.util.Map;//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Character.java//  @ Date : 2016/9/1//  @ Author : ////public class Character implements Prototype {    public enum Type{        WARRIOR,        MAGE,        ROGUE    }    private final Prototype prototype;    private Map<Stats,Integer> properties = new HashMap<>();    private String name;    private Type type;    public Character() {        this.prototype = new Prototype() { // Null-value object            @Override            public Integer get(Stats stat) {                return null;            }            @Override            public boolean has(Stats stat) {                return false;            }            @Override            public void set(Stats stat, Integer val) {            }            @Override            public void remove(Stats stat) {            }}        ;    }    public Character(Type type, Prototype prototype) {        this.type = type;        this.prototype = prototype;    }    public Character(String name, Character prototype) {        this.name = name;        this.type = prototype.type;        this.prototype = prototype;    }    public String name() {        return name;    }    public Type type() {        return type;    }    public Integer get(Stats stat) {        boolean containsValue = properties.containsKey(stat);        if (containsValue) {            return properties.get(stat);        } else {            return prototype.get(stat);        }    }    public boolean has(Stats stats) {        return get(stats) != null;    }    public void set(Stats stat, Integer val) {        properties.put(stat, val);    }    public void remove(Stats stats){        properties.put(stats, null);    }    @Override    public String toString() {        StringBuilder builder = new StringBuilder();        if (name != null) {            builder                .append("Player: ")                .append(name)                .append("\n");        }        if (type != null) {            builder                .append("Character type: ")                .append(type.name())                .append("\n");        }        builder.append("Stats:\n");        for (Stats stat : Stats.values()) {            Integer value = this.get(stat);            if (value == null) {                continue;            }            builder                .append(" - ")                .append(stat.name())                .append(":")                .append(value)                .append("\n");        }        return builder.toString();    }}public enum Stats {    AGILITY, STRENGTH, ATTACK_POWER, ARMOR, INTELLECT, SPIRIT, ENERGY, RAGE}import com.think.in.java.design.pattern.lesson31.Character.Type;public class App {    public static void main(String[] args) {        /* set up */        Prototype charProto = new Character();        charProto.set(Stats.STRENGTH, 10);        charProto.set(Stats.AGILITY, 10);        charProto.set(Stats.ARMOR, 10);        charProto.set(Stats.ATTACK_POWER, 10);        Character mageProto = new Character(Type.MAGE, charProto);        mageProto.set(Stats.INTELLECT, 15);        mageProto.set(Stats.SPIRIT, 10);        Character warProto = new Character(Type.WARRIOR, charProto);        warProto.set(Stats.RAGE, 15);        warProto.set(Stats.ARMOR, 15); // boost default armor for warrior        Character rogueProto = new Character(Type.ROGUE, charProto);        rogueProto.set(Stats.ENERGY, 15);        rogueProto.set(Stats.AGILITY, 15); // boost default agility for rogue        /* usage */        Character mag = new Character("Player_1", mageProto);        mag.set(Stats.ARMOR, 8);        System.out.println(mag);        Character warrior = new Character("Player_2", warProto);        System.out.println(warrior);        Character rogue = new Character("Player_3", rogueProto);        System.out.println(rogue);        Character rogueDouble = new Character("Player_4", rogue);        rogueDouble.set(Stats.ATTACK_POWER, 12);        System.out.println(rogueDouble);    }}/*Player: Player_1Character type: MAGEStats: - AGILITY:10 - STRENGTH:10 - ATTACK_POWER:10 - ARMOR:8 - INTELLECT:15 - SPIRIT:10Player: Player_2Character type: WARRIORStats: - AGILITY:10 - STRENGTH:10 - ATTACK_POWER:10 - ARMOR:15 - RAGE:15Player: Player_3Character type: ROGUEStats: - AGILITY:15 - STRENGTH:10 - ATTACK_POWER:10 - ARMOR:10 - ENERGY:15Player: Player_4Character type: ROGUEStats: - AGILITY:15 - STRENGTH:10 - ATTACK_POWER:12 - ARMOR:10 - ENERGY:15*/
0 0
原创粉丝点击