设计模式是程序员必须掌握的技能,熟练应用各种设计模式,不仅可以提升我们的编码能力,也可以使得我们的编码更美观。在这里我们来讲解一下建造者模式。
百度百科定义如下
建造者模式(Builder Pattern)是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
实用范围
1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。
角色
在这样的设计模式中,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
概念还是比较清晰,我们这里直接看代码
package com.designpatterns.builder;
//建造一个家
public interface HomeBuilder {
void buildMarry();
void buildChildren();
void buildHouse();
Home build();
}
package com.designpatterns.builder;
public class SmallHomeBuilder implements HomeBuilder {
Home home = new Home();
@Override
public void buildMarry() {
home.setMarry("结婚......");
}
@Override
public void buildChildren() { home.setChildren("生子......"); }
@Override
public void buildHouse() {
home.setHouse("买房......");
}
@Override
public Home build() {
return home;
}
}
package com.designpatterns.builder;
public class HomeDirector {
public Home constructHome(HomeBuilder hb) {
hb.buildMarry();
hb.buildChildren();
hb.buildHouse();
return hb.build();
}
}
package com.designpatterns.builder;
public class Home {
private String marry;
private String children;
private String house;
public String getMarry() {
return marry;
}
public void setMarry(String marry) {
this.marry = marry;
}
public String getChildren() {
return children;
}
public void setChildren(String children) {
this.children = children;
}
public String getHouse() {
return house;
}
public void setHouse(String house) {
this.house = house;
}
}
package com.designpatterns.builder;
/**
* 设计模式之建造者模式
*
* @author 小辉GE/小辉哥
* <p>
* 2019年11月10日 下午19:40:00
*/
public class TestMain {
public static void main(String[] args) {
HomeDirector director = new HomeDirector();
Home home = director.constructHome(new SmallHomeBuilder());
System.out.println(home.getMarry());
System.out.println(home.getChildren());
System.out.println(home.getHouse());
}
}
从上面代码可以看出
1 HomeBuilder:为创建一个产品对象的各个部件指定抽象接口。
2 SmallHomeBuilder:实现HomeBuilder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 HomeDirector:构造一个使用HomeBuilder接口的对象。
4 Home:表示被构造的复杂对象。SmallHomeBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
这里是基本的建造者模式的定义,很多时候在实际应用中会有多种演化。可能会省略抽象建造者角色或者省略指导者角色。这就需要大家自己工作中多多感悟。
以上代码仅供参考,如有不当之处,欢迎指出!!!
更多干货,欢迎大家关注我。期待和大家一起更好的交流、探讨技术!!!