设计模式——建造者模式

分类

设计模式总体划分为三大类:

创建型模式:工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式模式,共5种。

结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,共7中。

行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式,共11种。

建造者模式(生成器模式)

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

窝草,好抽象,那举个栗子吧

某汽车生产车间,一号汽车装配线,将各种零件按照工序组装在一起,生产出来一种型号的汽车,零件一变,就生产出另一种型号的汽车了。

建造者模式的本质:流程不变,但每个流程实现的具体细节则是经常变化的。

建造者模式保证了程序流程不会变化,即不会增加、也不会遗漏或者产生流程次序错误

建造者模式又叫生成器模式。

组成部分

Product:复杂产品对象。

Builder:一个抽象接口,规范创建Product的组成成分。只暴露组成部分的创建接口,不涉及具体创建细节,依赖Product。

ConcreteBuilder:实现Builder接口,完成Product各个组成部分的具体创建细节,依赖Product。

Director:负责创建一个Product,依赖Builder,Product。

代码示例

Product:Person

package cn.leo.demo.mode.creator;

public class Person {
	private String head;
	private String body;
	private String feet;
	
	public String getHead() {
		return head;
	}

	public void setHead(String head) {
		this.head = head;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public String getFeet() {
		return feet;
	}

	public void setFeet(String feet) {
		this.feet = feet;
	}
}

 Builder:PersonBuilder

package cn.leo.demo.mode.creator;

public interface PersonBuilder {
    void buildHead();
    void buildBody();
    void buildFeet();
    Person buildPerson();
}

 ConcreteBuilder:ManBuilder,WomenBuilder

package cn.leo.demo.mode.creator;

public class ManBuilder implements PersonBuilder{
    private Person person;
    
    public ManBuilder(Person person) {
        this.person = person;
    }

    @Override
    public void buildHead() {
        person.setHead("强壮男人的Head");
    }

    @Override
    public void buildBody() {
        person.setHead("强壮男人的Body");
    }

    @Override
    public void buildFeet() {
        person.setHead("强壮男人的Feet");
    }
    
    @Override
    public Person buildPerson() {
        return this.person;
    }
}
package cn.leo.demo.mode.creator;

public class WomenBuilder implements PersonBuilder{
    private Person person;
    
    public WomenBuilder(Person person) {
        this.person = person;
    }

    @Override
    public void buildHead() {
        person.setHead("温柔女人的Head");
    }

    @Override
    public void buildBody() {
        person.setHead("温柔女人的Body");
    }

    @Override
    public void buildFeet() {
        person.setHead("温柔女人的Feet");
    }

    @Override
    public Person buildPerson() {
        return this.person;
    }
}

 Director:PersonDirector

package cn.leo.demo.mode.creator;

public class PersonDirector {
	private PersonBuilder personBuilder;

	public PersonDirector(PersonBuilder personBuilder) {
		this.personBuilder = personBuilder;
	}
	
	public Person buildPerson(){
		personBuilder.buildHead();
		personBuilder.buildBody();
		personBuilder.buildFeet();
		
		return personBuilder.buildPerson();
	}
}

 ManBuilder,WomenBuilder实现了构造复杂对象Person各个组成部分的具体细节。

原文地址:https://www.cnblogs.com/seastar1989/p/7612062.html