建造者模式
定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
类图
适用范围
1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。
角色
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
例子
Product类
public class Product {
private String name;
private String type;
public Product() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
IBulid接口
public interface IBulid {
IBulid setName(String name);
IBulid setType(String type);
Product createProduct();
}
ConcreteBuilder类
public class ConcreteBuilder implements IBulid {
private Product product = new Product();
@Override
public IBulid setName(String name) {
product.setName(name);
return this;
}
@Override
public IBulid setType(String type) {
product.setType(type);
return this;
}
@Override
public Product createProduct() {
return product;
}
}
Director类
public class Director {
private IBulid mBulid;
public Product create(IBulid bulid) {
bulid.setName("name");
bulid.setType("type");
return bulid.createProduct();
}
}
程序入口MianActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IBulid bulid = new ConcreteBuilder();
Director director = new Director();
Product product = director.create(bulid);
Log.e("zhang", "onCreate: " + product.getName() + "=========" + product.getType());
//@by 2016/6/2 其实不用Director也可以,Director控制流程顺序
Product p = bulid.setName("eeeeee").setType("rrrrr").createProduct();
Log.e("zhang", "onCreate: " + p.getName() + "=========" + p.getType());
}
}
Bulid作为Product内部类实现
public class Product {
private String mName;
private String mType;
public Product() {
}
public String getName() {
return mName;
}
public String getType() {
return mType;
}
public class Bulid1 {
public Bulid1() {
}
public Product.Bulid1 setName(String name) {
mName = name;
return this;
}
public Product.Bulid1 setType(String type) {
mType = type;
return this;
}
public Product create() {
return Product.this;
}
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Product.Bulid1 b = new Product().new Bulid1();
Product p1 = b.setName("zhangsan").setType("nan").create();
Log.e("zhang", "onCreate: " + p1.getName() + "=========" + p1.getType());
}
Bulid作为Product静态内部类实现
public class Product {
private String mName;
private String mType;
public Product() {
}
public Product(Bulid1 bulid1) {
mName = bulid1.mName;
mType = bulid1.mType;
}
public String getName() {
return mName;
}
public String getType() {
return mType;
}
public static class Bulid1 {
private String mName;
private String mType;
public Bulid1() {
}
public Product.Bulid1 setName(String name) {
mName = name;
return this;
}
public Product.Bulid1 setType(String type) {
mType = type;
return this;
}
public Product create() {
return new Product(this);
}
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Product.Bulid1 b = new Product.Bulid1();
Product p1 = b.setName("zhangsan").setType("nan").create();
Log.e("zhang", "onCreate: " + p1.getName() + "=========" + p1.getType());
}
}