构造性模式:
- 一般情况下iain,需要为自己开发的类提供构造函数使其能够被初始化。这些构造函数相互协作,并且类种的每个构造函数最终都会去带调用超类的构造函数。
- 调用构造函数的方式有两种:
- 使用new操作符
- 使用发射来初始化和使用对象
构造者模式
创建一个对象时,并不一定拥有创建该对象的全部信息.而是需要逐步的获得创建对象的信息,更方便的做法就时分步骤构建对象。
意图:将类的构建逻辑转移到类的实例化外部。
引入构造者模式,就可以提供一个中间对象来存储数据,直到准备好所有数据后,再根据中间对象的数据来构建目标对象。
小结:
- 构建者关注目标类的构建过程,目标类关注合法实例的业务本身。好处时在实例化目标类前,确保得到的是一个有效的对象,并且不会让构建逻辑出现在目标类本身。
- 构造者构建类对象的过程通常是分步骤的,这使得该模式通常被应用于解析文本以创建对象的场景。
代码如下:
package website.dengta.builder;
/**
* @author www.dengta.website
* @date 2017-11-06 23:25
*/
public class Product {
public Product() {
System.out.println("product is init");
}
}
package website.dengta.builder;
public abstract class Builder {
Product product = new Product();
public abstract void builderPartA();
public abstract void builderPartB();
public abstract void builderPartC();
public abstract Product getResult();
}
package website.dengta.builder;
/**
* @author www.dengta.website
* @date 2017-11-06 23:25
*/
public class ConcreteBuilder extends Builder {
private Product product = new Product();
@Override
public void builderPartA() {
System.out.println("组装A");
}
@Override
public void builderPartB() {
System.out.println("组装B");
}
@Override
public void builderPartC() {
System.out.println("组装C");
}
@Override
public Product getResult() {
return product;
}
}
package website.dengta.builder;
/**
* @author www.dengta.website
* @date 2017-11-06 23:33
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct(){
builder = new ConcreteBuilder();
builder.builderPartA();
builder.builderPartB();
builder.builderPartC();
builder.getResult();
}
}
package website.dengta.builder;
/**
* @author www.dengta.website
* @date 2017-11-06 23:35
*/
public class TestCient {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
}
}