2018.3.31 设计模式之生成器模式详解及例子(对象创建型模式)

设计模式之生成器模式(对象创建型模式)

1.定义/概念

将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示。

2.生成模式角色

Builder:                 生成器接口,定义创建一个Product对象所需要的各个部件的操作。
ConcreteBuilder:    具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:               指导者,也被称导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:                产品,表示被生成器构建的复杂对象,包含多个部件。

3.应用场景:一水杯工厂要生产各式各样的水杯,无论杯子是神马造型,但都包括绳子,帽子和杯体。以此模型创建各种类型的杯子。

Builder.java

package com.glut.demo6;

/**
 * Builder类
 * 生成器接口,定义创建一个Product对象所需要的各个部件的操作。
 * @author qichunlin
 *
 */
public abstract class Builder {
	//创建一个杯子   原来这里是设为protected类型的
	Cup cup = new Cup();
	//建立杯子模型
	public abstract void buildString();//创建一个绳子部件
	public abstract void buildCap();//创建一个帽子部件
	public abstract void buildCupBody();//创建一个杯体部件
	
	//返回一个杯子对象
	public Cup getResult() {
		return cup;
	}
}

ClassCup.java

package com.glut.demo6;

/**
 * 
 * 具体建造者 ConcreteBuilder
 * @author qichunlin
 *
 */
public class ClassCup extends Builder{

	@Override
	public void buildString() {
		cup.setString("生产绳子");
		System.out.println("生产绳子....");
	}

	@Override
	public void buildCap() {
		cup.setCap("生产帽子");
		System.out.println("生产帽子....");
	}

	@Override
	public void buildCupBody() {
		cup.setCupbody("生产杯体");
		System.out.println("生产杯体....");
	}
	
}

Cup.java

package com.glut.demo6;

/**
 * 杯子类
 * 
 * @author qichunlin
 *
 */
public class Cup {
	private String string;//绳子
	private String cap;//帽子
	private String cupbody;//杯体
	public String getString() {
		return string;
	}
	public void setString(String string) {
		this.string = string;
	}
	public String getCap() {
		return cap;
	}
	public void setCap(String cap) {
		this.cap = cap;
	}
	public String getCupbody() {
		return cupbody;
	}
	public void setCupbody(String cupbody) {
		this.cupbody = cupbody;
	}
	
	//显示
	public void show() {
		System.out.println("杯子生产完毕!");
	}
	
}

Director.java

package com.glut.demo6;

/**
 * 导演类
 * 
 * @author qichunlin
 *
 */
public class Director {
	private Builder builder;
	
	public Director(Builder builder) {
		this.builder = builder;
	}
	
	//获取产品
	public void create() {
		builder.buildString();
		builder.buildCap();
		builder.buildCupBody();
		builder.getResult().show();
	}
	
	
}

Test.java

package com.glut.demo6;

/**
 * 生成器模式
 * 
 * 定义:将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示。
 * @author qichunlin
 *
 */
public class Test {
	public static void main(String[] args) {
		//创建具体建造者
		ClassCup cc = new ClassCup();
		//创建指挥者
		Director d = new Director(cc);
                d.create();
	}
}

4.生成器模式与工厂模式的不同

生成器模式构建对象的时候,对象通常构建的过程中需要多个步骤,就像我们例子中的先有主机,再有显示屏,再有鼠标等等,生成器模式的作用就是将这些复杂的构建过程封装起来。
工厂模式构建对象的时候通常就只有一个步骤,调用一个工厂方法就可以生成一个对象。

5.生成器模式的优缺点

优点

将一个对象分解为各个组件
将对象组件的构造封装起来
可以控制整个对象的生成过程

缺点

对不同类型的对象需要实现不同的具体构造器的类,这可能回答大大增加类的数量

6.生成器模式的功能

生成器模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在一步一步解决构造复杂对象的问题。如果仅仅这么认知生成器模式的功能是不够的。
更为重要的是,这个构建的过程是统一的、固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程,就能构建出不同的产品来。

原文地址:https://www.cnblogs.com/qichunlin/p/8680072.html