Java设计模式——建造者模式

所谓建造者模式就是将复杂对象的构建过程与其表示分离,使得同样的构建过程可以产生不同的表现形式。

例如我们玩游戏时玩家每次游戏可以选择玩不一样的英雄,而这些英雄会有共同的一些属性如,名称,等级,角色,我们每次不用管内部是如何构造英雄的,只需要拿到不同英雄就可以,简单看下的代码。

/**
 * 英雄的实体
 */
public class Hero {

    private String name;
    private int grade;
    private String role;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    @Override
    public String toString() {
        return "Hero{" +
                "name='" + name + '\'' +
                ", grade=" + grade +
                ", role='" + role + '\'' +
                '}';
    }
}
/**
 * 一个构建英雄属性的接口
 */
public interface Builder {

    public void buildName();

    public void buildGrade();

    public void buildRole();

    public Hero buildHero();

}
/**
 * 设置亚索的英雄属性
 */
public class BuilderYaSuo implements Builder {

    private Hero hero = new Hero();

    @Override
    public void buildName() {
        hero.setName("亚索");
    }

    @Override
    public void buildGrade() {
        hero.setGrade(18);
    }

    @Override
    public void buildRole() {
        hero.setRole("刺客");
    }

    @Override
    public Hero buildHero() {
        return hero;
    }

}
/**
 * 设置劫的英雄属性
 */
public class BuilderJie implements Builder {

    private Hero hero = new Hero();

    @Override
    public void buildName() {
        hero.setName("劫");
    }

    @Override
    public void buildGrade() {
        hero.setGrade(18);
    }

    @Override
    public void buildRole() {
        hero.setRole("刺客");
    }

    @Override
    public Hero buildHero() {
        return hero;
    }

}
/**
 * 建造者
 */
public class Constructor {

    public static Hero ConstructorHero(Builder builder){
        builder.buildName();
        builder.buildGrade();
        builder.buildRole();
        return builder.buildHero();
    }
}
/**
 * 召唤师选择英雄
 */
public class Summoner {
    public static void main(String[] args) {
        //召唤亚索
        Hero h = Constructor.ConstructorHero(new BuilderYaSuo());
        System.out.println(h.toString());
        //召唤劫
        Hero h1 = Constructor.ConstructorHero(new BuilderJie());
        System.out.println(h1.toString());
    }
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值