构造器模式

构造器模式

  1. 意图
    • 将一个复杂对象的构建和表示分离,使得相同的构建能创建不同的表示。
  2. 解释
    案例:想象一个角色扮演游戏的特征生成器。最简单的选择是让计算机为你创建角色。如果你想手动选择特征的细节像职业、性别、头发的颜色等。特征的产生是一个循序渐进的过程,当所有选择都就绪时结束。
    简单说:允许你在避免函数污染的情况下创建不同特征的对象。当一个对象有好几种特征时或当创建对象需要很多步骤时。
  3. 样例
    //盔甲
    public enum Armor {
        CHAIN_MAIL("Chain Mail"),
        CLOTHES("Clothes"),
        LEATHER("leather"),
        PLATE("plate");
    
        private String description;
    
        Armor(String description) {
            this.description = description;
        }
    
        public String getDescription() {
            return description;
        }
    }
    
    //头发的颜色
    public enum HairColor {
        BLACK,
        BLOND,
        BROWN,
        RED,
        WHITE;
    }
    
    //头发类型
    public enum HairType {
        BALD("bald"),
        CURLY("curly"),
        LONG_CURLY("long curly"),
        LONG_STRAIGHT("long straight"),
        SHORT("short");
    
        private String description;
    
    
        HairType(String description) {
            this.description = description;
        }
    }
    
    //职业
    public enum Profession {
        MAGE,
        PRIEST,
        THIEF,
        WARRIOR;
    }
    
    //武器
    public enum Weapon {
        AXE,
        BOW,
        DAGGER,
        SWORD,
        WARHAMMER;
    
    }
    
    //角色
    public final class Hero {
        private Armor armor;
        private Weapon weapon;
        private HairType hairType;
        private HairColor hairColor;
        private Profession profession;
    
        public Hero(Builder builder){
            this.armor = builder.armor;
            this.weapon = builder.weapon;
            this.hairType = builder.hairType;
            this.hairColor = builder.hairColor;
            this.profession = builder.profession;
        }
    
        public Armor getArmor() {
            return armor;
        }
    
        public Weapon getWeapon() {
            return weapon;
        }
    
        public HairType getHairType() {
            return hairType;
        }
    
        public HairColor getHairColor() {
            return hairColor;
        }
    
        public Profession getProfession() {
            return profession;
        }
    
        public static class Builder {
            private Armor armor;
            private HairType hairType;
            private HairColor hairColor;
            private Profession profession;
            private Weapon weapon;
            private String name;
    
            public Builder(Profession profession, String name) {
                this.profession = profession;
                this.name = name;
            }
    
            public Hero build() {
                return new Hero(this);
            }
    
            Builder withArmor(Armor armor) {
                this.armor = armor;
                return this;
            }
    
            Builder withHairType(HairType hairType) {
                this.hairType = hairType;
                return this;
            }
    
            Builder withHairColor(HairColor hairColor) {
                this.hairColor = hairColor;
                return this;
            }
    
            Builder withWeapon(Weapon weapon) {
                this.weapon = weapon;
                return this;
            }
        }
    
    }
    
    public class Main {
        public static void main(String[] args) {
            var riobard = new Hero.Builder(Profession.MAGE, "Riobard").
                    withHairColor(HairColor.BLACK).
                    withWeapon(Weapon.DAGGER)
                    .build();
            
        }
    }
    
  4. 结构图

在这里插入图片描述

  1. 适用性
  • 创建复杂对象的算法应该独立于其组成对象的部件和组装的方式。
  • 构造的过程必须允许对构造的对象进行不同的表示。
  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值