建造者模式
基本介绍
1)建造者模式又叫生成器模式,是一种对象构建模式,他可以将复杂对象的建造过程抽象出来,使用这个抽象过程的不同实现方法可以构造出不同表现的对象。
2)建造者模式是一步一步的创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建他们,用户不需要知道内部的具体构建细节
建造者模式的四个角色
1)Produce(产品角色):一个具体的产品对象
2)Builder(抽象建造者):创建一个Produce对象的各个部件指定的接口/抽象类
3)ConcreateBuilder(具体建造者):实现接口,构建和装配各个部件
4)Director(指挥者):构建一个使用Builder接口的对象,它主要适用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程
建造者模式的注意事项和细节
1)客户端不必知道产品内部组成细节
2)具体的建造类之间是相互独立的,对系统扩展非常有利,但是如果内部特别复杂,会有很多的建造类
3)由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响
类图
示例代码
package com.example.demo.design.builder;
public class KFC {
/**
* 必买商品
*/
private String hambuger;
private String chips;
/**
* 选购商品
*/
private String chicken;
private String cola;
private String pizza;
public KFC(String hambuger,String chips){
this.hambuger = hambuger;
this.chips = chips;
}
public String getHambuger() {
return hambuger;
}
public void setHambuger(String hambuger) {
this.hambuger = hambuger;
}
public String getChips() {
return chips;
}
public void setChips(String chips) {
this.chips = chips;
}
public String getChicken() {
return chicken;
}
public void setChicken(String chicken) {
this.chicken = chicken;
}
public String getCola() {
return cola;
}
public void setCola(String cola) {
this.cola = cola;
}
public String getPizza() {
return pizza;
}
public void setPizza(String pizza) {
this.pizza = pizza;
}
@Override
public String toString() {
return "KFC{" +
"hambuger='" + hambuger + '\'' +
", chips='" + chips + '\'' +
", chicken='" + chicken + '\'' +
", cola='" + cola + '\'' +
", pizza='" + pizza + '\'' +
'}';
}
}
package com.example.demo.design.builder;
public abstract class Builder {
abstract Builder setChicken();
abstract Builder setCola();
abstract Builder setPizza();
abstract KFC getKFC();
}
package com.example.demo.design.builder;
public class ConcreteBuilder extends Builder{
KFC kfc;
public ConcreteBuilder(String hamburger,String chips){
kfc = new KFC(hamburger,chips);
}
@Override
Builder setChicken() {
kfc.setChicken("鸡腿");
return this;
}
@Override
Builder setCola() {
kfc.setCola("可乐");
return this;
}
@Override
Builder setPizza() {
kfc.setPizza("披萨");
return this;
}
@Override
KFC getKFC() {
return kfc;
}
}
package com.example.demo.design.builder;
public class Client {
public static void main(String[] args) {
KFC kfc = new ConcreteBuilder("鸡腿堡","大薯").setChicken().setCola().getKFC();
System.out.println(kfc.toString());
System.out.println("-------------");
KFC kfc1 = new ConcreteBuilder("鸡腿堡","大薯").setChicken().setCola().setPizza().getKFC();
System.out.println(kfc1.toString());
}
}
结果
建造者模式在jdk中的应用分析
StringBuilder运用了建造者模式
(该图来自csdn https://blog.youkuaiyun.com/sinat_35821285/article/details/80004060)