创建型-建造者模式(builder)

1,简介

  建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的角色

  1. Builder:为创建一个产品对象的各个部件指定抽象接口。
  2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
  3. Director:构造一个使用Builder接口的对象。
  4. Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

2,demo

1)抽象建造类:Builder

package com.demo.base.design_partten.builder;
/**
* @author gx
* 为创建产品对象的各个部件的指定抽象接口
*/
public interface Builder {
void buildHead();
void buildBody();
void buildFoot();
Product buildPerson();
}

2)具体的建造类

package com.demo.base.design_partten.builder;
/**
* 具体的建造工具
* @author gx
*/
public class ConcreteBuilder implements Builder {
Product product;
public ConcreteBuilder(){
product = new Product();
}
@Override
public void buildHead() {
product.setHead("建造头部");
}
@Override
public void buildBody() {
product.setBody("建造身体");
}
@Override
public void buildFoot() {
product.setFoot("建造脚步");
}
@Override
public Product buildPerson() {
return product;
}
}

3)复杂的产品类

package com.demo.base.design_partten.builder;
/**
* @author gx
* 表示被构造的复杂对象
*/
public class Product {
private String head;
private String body;
private String foot;
public String getBody() {
return body;
}
public String getFoot() {
return foot;
}
public String getHead() {
return head;
}
public void setBody(String body) {
this.body = body;
}
public void setFoot(String foot) {
this.foot = foot;
}
public void setHead(String head) {
this.head = head;
}
@Override
public String toString() {
return "Product{" +
"head='" + head + '\'' +
", body='" + body + '\'' +
", foot='" + foot + '\'' +
'}';
}
}

4)使用 Builder 工具的类

package com.demo.base.design_partten.builder;
/**
* @author gx
* 构造一个使用 Builder 接口的对象
*/
public class Director {
public Product constructProduct(Builder pb){
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}

5)业务类

public class MainTest {
public static void main(String[] args) {
Director director = new Director();
Product product = director.constructProduct(new ConcreteBuilder());
System.out.println(product);
}
}

3, 使用链式编程

  1. 产品类
package com.demo.base.design_partten.builder.chain;
/**
* @author gx
* 表示一个复杂的产品
* */
public class Car {
private String name;
private double price;
private String color;
private String sell;
public static Car instance(){
return new Car();
}
public Car createName(String name){
this.setName(name);
return this;
}
public Car createPrice(double price){
this.setPrice(price);
return this;
}
public Car createColor(String color){
this.setColor(color);
return this;
}
public Car createSell(String sell){
this.setSell(sell);
return this;
}
public double getPrice() {
return price;
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
public String getSell() {
return sell;
}
public void setPrice(double price) {
this.price = price;
}
public void setName(String name) {
this.name = name;
}
public void setColor(String color) {
this.color = color;
}
public void setSell(String sell) {
this.sell = sell;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", price=" + price +
", color='" + color + '\'' +
", sell='" + sell + '\'' +
'}';
}
}
  1. 业务类
package com.demo.base.design_partten.builder.chain;
/**
* @author gx
*/
public class Test {
public static void main(String[] args) {
Car car = Car.instance().createSell("100").createColor("red").createName("特斯拉").createPrice(120.3);
System.out.println(car);
}
}

4. 使用场景

  1. Mybatis 缓存的创建,CacheBuilder 类来创建 Cache。

本文作者:primaryC

本文链接:https://www.cnblogs.com/cnff/p/17406827.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   primaryC  阅读(8)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.