建造者模式简介
建造模式的特点我们可以用一个小例子来简述一下,比如我们现在有个房子,那么这个房子的构建步骤有那些?
- 先要刨土,摊平
- 然后浇筑水泥做一个稳固的地基
- 然后在开始搞结构
- 然后就是搞墙体
- 然后做硬装,软装啥的
经过上述步骤是不是一个房子就建造完毕了。那么我们试想一下这时候我们要改变其中一个步骤是不是需要动后面左右的步骤。这时候我们就用到了建造者模式,他可以帮我们来进行组装步骤完成结果
代码演示
package com.company.builderMode;
/**
* @author yangpeng
*/
public class Order {
private String orderDocNo;
private String createUser;
private String sourceType;
private String pfDocNo;
public String getOrderDocNo() {
return orderDocNo;
}
public void setOrderDocNo(String orderDocNo) {
this.orderDocNo = orderDocNo;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public String getSourceType() {
return sourceType;
}
public void setSourceType(String sourceType) {
this.sourceType = sourceType;
}
public String getPfDocNo() {
return pfDocNo;
}
public void setPfDocNo(String pfDocNo) {
this.pfDocNo = pfDocNo;
}
public Order() {
}
}
package com.company.builderMode;
/**
* @author yangpeng
*/
public abstract class OrderBuilderUtil {
protected Order order = new Order();
public abstract void builderOrderHead();
public abstract void builderOrderItem();
public Order builderOrder() {
return order;
}
}
package com.company.builderMode;
/**
* @author yangpeng
*/
public class OrderDirector {
OrderBuilderUtil orderBuilderUtil = null;
public void OrderDirector(OrderBuilderUtil orderBuilderUtil){
this.orderBuilderUtil = orderBuilderUtil;
}
public Order createOrder(OrderBuilderUtil orderBuilderUtil){
orderBuilderUtil.builderOrderHead();
orderBuilderUtil.builderOrderItem();
return orderBuilderUtil.builderOrder();
}
}
package com.company.builderMode;
public class CreateTmOrder extends OrderBuilderUtil{
@Override
public void builderOrderHead() {
System.out.println("创建天猫的订单头");
}
@Override
public void builderOrderItem() {
System.out.println("创建天猫的订单行");
}
}
package com.company.builderMode;
public class CreateJdOrder extends OrderBuilderUtil {
@Override
public void builderOrderHead() {
System.out.println("创建京东订单头");
}
@Override
public void builderOrderItem() {
System.out.println("创建京东订单行");
}
}
package com.company.builderMode;
public class OrderManager {
public static void main(String[] args) {
CreateTmOrder createTmOrder = new CreateTmOrder();
OrderDirector orderDirector = new OrderDirector();
Order order = orderDirector.createOrder(createTmOrder);
}
}
//结果
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
创建天猫的订单头
创建天猫的订单行
Disconnected from the target VM, address: '127.0.0.1:61376', transport: 'socket'
总结
任何设计模式都不能单独的去认定是否好用,应该是一个编码的思考方式,这样才可以为代码提供符合开闭原则的代码,各位小伙伴也可以关注我的微信公众号 架构小知识 获取更多关于其他技术问题的内容