五、建造者模式
1、什么是建造者模式
建造者模式: 是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。
工厂类模式是提供的是创建单个类的产品
而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品
建造者模式通常包括下面几个角色:
1、 uilder: 给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。ConcreteBuilder: 实现 Builder 接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。3、Director: 调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。Product: 要创建的复杂对象。
2、建造者模式的使用场景
使用场景:
- 需要生成的对象具有复杂的内部结构
- 需要生成的对象内部属性本身相互依赖。
与工厂模式的区别是: 建造者模式更加关注与零件装配的顺序。
JAVA 中的 StringBuilder就是建造者模式创建的,他把一个单个字符的 char数组组合起来。Spring 不是建造者模式,它提供的操作应该是对于字符串本身的一些操作,而不是创建或改变一个字符串。
3、代码案例
建立一个装备对象 Arms
package com.lijie;
//装备类
public class Arms{
//头盔
private String helmet;
//铠甲
private String armor;
//武器
private String weapon;
//省略 Git 和 Set 方法..........
}
创建 Builder 接口 (给出一个抽象接口,以规范产品对象的各个组成成分的建造,这个接口只是规范)
package com.lijie;
public interface PersonBuilder{
void builderHelmetMurder();
void builderArmorMurder();
void builderWeaponMurder();
void builderHelmetYanLong();
void builderArmorYanLong();
void builderWeaponYanLong();
Arms BuilderArms();//组装
}
创建 Builder 实现类 (这个类主要实现复杂对象创建的哪些部分需要什么属性)
package com.lijie;
public class ArmsBuilder implements PersonBuilder{
private Arms arms;
//创建一个Arms实例,用于调用 set 方法
public ArmsBuilder(){
arms = new Arms();
}
public void builderHelmetMurder(){
arms.setHelmet("夺命头盔");
}
public void builderArmorMurder(){
arms.setArmor("夺命铠甲");
}
public void builderWeaponMurder(){
arms.setWeapon("夺命宝刀");
}
public void builderHelmetYanLong(){
arms.setHelmet("炎龙头盔");
}
public void builderArmorYanLong(){
arms.setArmor("炎龙铠甲");
}
public void builderWeaponYanLong(){
arms.setWeapon("炎龙宝刀");
}
public Arms BuilderArms(){
return arms;
}
}
Director (调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建)
package com.lijie;
public class PersonDirector{
//组装
public Arms constructPerson(PersonBuilder pb){
pb.builderHelmetYanLong();
pb.builderArmorMurder();
pb.builderWeaponMurder();
return pb.BuilderArms();
}
//这里进行测试
public static void main(String[] args) {
PersonDirector pb = new PersonDirector();
Arms arms = pb.constructPerson(new ArmsBuilder());
System.out.println(arms.getHelmet());
System.out.println(arms.getArmor());
System.out.println(arms.getWeapon());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111802.html