参考学习:www.mayikt.com
建造者模式
11.1 代码演示
11.1.2 方式一:单独创建建造者
11.1.2.1 用户实体
package com.mayikt.study.mybatis.build;
/**
* <h1>用户实体(使用建造者模式创建用户</h1>
*
* @author zx
* @date 2022年07月15日 20:37
*/
public class User {
private String name;
private Integer age;
public User() {
}
public User(UserBuild userBuild) {
this.name = userBuild.getName();
this.age = userBuild.getAge();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
11.1.2.2 建造者
package com.mayikt.study.mybatis.build;
/**
* <h1>使用建造者模式创建用户实体对象</h1>
*
* @author zx
* @date 2022年07月15日 20:38
*/
public class UserBuild {
//持有被建造者的属性,便于对被建造者进行赋值
private String name;
private Integer age;
public UserBuild name(String name) {
this.name = name;
return this;
}
public UserBuild age(Integer age) {
this.age = age;
return this;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
//返回被建造者对象
public User build() {
return new User(this);
}
}
11.1.2.3 测试
package com.mayikt.study.mybatis.build;
import org.junit.Test;
/**
* @author zx
* @date 2022年07月15日 20:41
*/
public class UserBuildTest {
@Test
public void testUserBuild(){
User user = new UserBuild().age(34).name("tom").build();
System.out.println(user);
}
}
11.1.3 方式二: 使用静态内部类形式
11.1.3.1 静态内部类形式
package com.mayikt.study.mybatis.build;
/**
* <h1>使用静态内部类形式使用建造者模式</h1>
*
* @author zx
* @date 2022年07月16日 8:21
*/
public class Order {
private String orderName;
private Double price;
@Override
public String toString() {
return "Order{" +
"orderName='" + orderName + '\'' +
", price=" + price +
'}';
}
public Order(OrderBuilder orderBuilder) {
this.orderName = orderBuilder.orderName;
this.price = orderBuilder.price;
}
static class OrderBuilder {
private String orderName;
private Double price;
public OrderBuilder orderName(String orderName) {
this.orderName = orderName;
return this;
}
public OrderBuilder price(Double price) {
this.price = price;
return this;
}
public Order build() {
return new Order(this);
}
}
}
11.1.3.2 测试
package com.mayikt.study.mybatis.build;
import org.junit.Test;
/**
* <h1>测试使用静态内部类构建建造者</h1>
* @author zx
* @date 2022年07月16日 8:24
*/
public class OrderTest {
@Test
public void testOrder(){
Order order = new Order.OrderBuilder().orderName("apple phone 13").price(5400.3).build();
System.out.println(order);
}
}
11.1.4 方式三:静态内部类构造创建建造者
11.1.4.1 静态内部类构造创建建造者
package com.mayikt.study.mybatis.build;
/**
* <h1>另一种建造者模式的写法</h1>
*
* @author zx
* @date 2022年07月16日 8:08
*/
public class MappedMethod {
private String sql;
private String statementId;
@Override
public String toString() {
return "MappedMethod{" +
"sql='" + sql + '\'' +
", statementId='" + statementId + '\'' +
'}';
}
static class Builder {
private MappedMethod mappedMethod = new MappedMethod();
public Builder(String sql, String statementId) {
mappedMethod.sql = sql;
mappedMethod.statementId = statementId;
}
public MappedMethod build() {
return mappedMethod;
}
}
}
11.1.4.2 测试
package com.mayikt.study.mybatis.build;
import org.junit.Test;
/**
* <h1>另一种建造者模式写法的测试</h1>
*
* @author zx
* @date 2022年07月16日 8:11
*/
public class MappedMethodTest {
@Test
public void testMappedMethod(){
String sql = "select * from t_user where id = ?";
String statementId = "com.mayikt.mapper.IUserMapper.queryUserInfoById";
MappedMethod mappedMethod = new MappedMethod.Builder(sql, statementId).build();
System.out.println(mappedMethod);
}
}