构造器模式

构造器模式

  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. 适用性
  • 创建复杂对象的算法应该独立于其组成对象的部件和组装的方式。
  • 构造的过程必须允许对构造的对象进行不同的表示。

相关推荐

  1. C++构造设计模式

    2024-01-29 08:54:01       9 阅读
  2. 解释模式构建领域特定语言的强有力工具

    2024-01-29 08:54:01       14 阅读
  3. 2. 条件构造

    2024-01-29 08:54:01       37 阅读
  4. 【MyBatisPlus条件构造

    2024-01-29 08:54:01       9 阅读
  5. mybatis-plus构造查询

    2024-01-29 08:54:01       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-29 08:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-29 08:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-29 08:54:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-29 08:54:01       20 阅读

热门阅读

  1. myql入门

    2024-01-29 08:54:01       32 阅读
  2. Redis面试题35

    2024-01-29 08:54:01       33 阅读
  3. Vue路由

    2024-01-29 08:54:01       34 阅读
  4. 【洛谷题解】P1706 全排列问题

    2024-01-29 08:54:01       38 阅读
  5. Redis 事务

    2024-01-29 08:54:01       34 阅读
  6. MyBatis框架-XML映射器

    2024-01-29 08:54:01       24 阅读
  7. 关键点标注工具

    2024-01-29 08:54:01       28 阅读