java设计模式(精通系列)-Builder模式
来源:互联网 发布:智慧树网络课程app 编辑:程序博客网 时间:2024/06/04 00:43
建造者模式:跟构造器相比,builder模式更加的灵活
假如一个英雄有如下属性
private final Profession profession; private final String name; private final HairType hairType; private final HairColor hairColor; private final Armor armor; private final Weapon weapon;
如果用构造器模式构造会很麻烦(因为有些英雄没有武器,或者没有一些属性,这样你要把这些特殊情况一一构造就显得多余)
而如果构造器里面再加个构造器,把自己想要的属性setter进去,就会方便很多,这就是我们的建造者模式
public class App { public static void main(String[] args) { Hero mage=new Hero.Builder(Profession.MAGE,"法师").withHairColor(HairColor.BLACK).withWeapon(Weapon.DAGGER).build(); System.out.println(mage.toString()); Hero warrior = new Hero.Builder(Profession.WARRIOR, "战士").withHairColor(HairColor.BLOND) .withHairType(HairType.LONG_CURLY).withArmor(Armor.CHAIN_MAIL).withWeapon(Weapon.SWORD) .build(); System.out.println(warrior.toString()); }}
/** * Created by gmy on 2017/10/11. */public class Hero { private final Profession profession; private final String name; private final HairType hairType; private final HairColor hairColor; private final Armor armor; private final Weapon weapon; private Hero(Builder builder){ this.profession=builder.profession; this.name=builder.name; this.hairType=builder.hairType; this.hairColor=builder.hairColor; this.armor=builder.armor; this.weapon=builder.weapon; } @Override public String toString() { StringBuilder sb=new StringBuilder(); sb.append("This is a ") .append(profession) .append(" named ") .append(name); if(hairColor!=null||hairType!=null){ sb.append(" with "); if(hairColor!=null){ sb.append(hairColor).append(' '); } if(hairType!=null){ sb.append(hairType).append(' '); } sb.append(hairType!=HairType.BALD ? "hair":"head");//如果是光头则为head } if (armor!=null){ sb.append(" wearing ").append(armor); } if(weapon!=null){ sb.append(" and wielding a ").append(weapon); } sb.append('.'); return sb.toString(); } public Profession getProfession() { return profession; } public String getName() { return name; } public HairType getHairType() { return hairType; } public HairColor getHairColor() { return hairColor; } public Armor getArmor() { return armor; } public Weapon getWeapon() { return weapon; } public static class Builder{ private final Profession profession; private final String name; private HairType hairType; private HairColor hairColor; private Armor armor; private Weapon weapon; public Builder(Profession profession,String name){//此处为必须的一些参数 if(profession==null||name==null){ throw new IllegalArgumentException("profession and name is null"); } this.profession=profession; this.name=name; } public Builder withHairType(HairType hairType){ this.hairType=hairType; return this; } public Builder withHairColor(HairColor hairColor){ this.hairColor=hairColor; return this; } public Builder withArmor(Armor armor){ this.armor=armor; return this; } public Builder withWeapon(Weapon weapon){ this.weapon=weapon; return this; } public Hero build(){ return new Hero(this); } }}
public enum Armor { CLOTHES("clothes"), LEATHER("leather"), CHAIN_MAIL("chain mail"), PLATE_MAIL("plate mail"); private String title; Armor(String title){ this.title=title; } @Override public String toString() { return title; }}
public enum HairColor { WHITE, BLOND, RED, BROWN, BLACK; @Override public String toString() { return name().toLowerCase(); }}
public enum HairType { BALD("bald"), SHORT("short"), CURLY("curly"), LONG_STRAIGHT("long straight"), LONG_CURLY( "long curly"); private String title; HairType(String title) { this.title = title; } @Override public String toString() { return title; }}
public enum Profession { WARRIOR, THIEF, MAGE, PRIEST; @Override public String toString() { return name().toLowerCase(); }}
public enum Weapon { DAGGER, SWORD, AXE, WARHAMMER, BOW; @Override public String toString() { return name().toLowerCase(); }}
Builder模式本质就是在构造器里面再添个构造器叫做Builder
阅读全文
0 0
- java设计模式(精通系列)-Builder模式
- java设计模式(精通系列)-Adapter模式
- java设计模式(精通系列)-Bridge模式
- java设计模式(精通系列)-factory
- java设计模式(精通系列)-proxy
- java设计模式(精通系列)-Decorator
- java设计模式(精通系列)-command
- JAVA设计模式-Builder
- java设计模式-Builder
- java设计模式:Builder模式
- Java设计模式---Builder模式
- Java设计模式--Builder模式
- Java设计模式--builder模式
- java设计模式(精通系列)-策略模式(Strategy)
- 用Java实现的设计模式系列(3)--Builder
- java设计模式--Builder设计模式
- java设计模式(精通系列)-基础uml概念
- Java设计模式—Builder
- container_of分析
- 一个超级隐蔽的坑:关于excel
- JDBC之Dao模式
- Http与RPC通信协议的比较
- Java的finally关键字
- java设计模式(精通系列)-Builder模式
- 微信服务端DEMO类的作用
- Oracle数据库体系结构更改数据库的归档模式
- windows 安装laravel Homestead
- Java中Collection和Collections的区别(转载收藏用)
- 在linux环境下安装tensorflow
- PL/SQL之--存储过程
- LeakCanary原理解析
- js 弹出确认 取消对话框