1、生成器模式
生成器模式也称为建造者模式。生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
生成器模式的编程步骤:
(1)定义一个产品类;
由于不在该类完成Product类对象的创建,所以无需显示定义构造方法。
(2)定义n个生成器Build类;
生成器是用来生成Product对象的,因此一般来说,Product是生成器类的一个成员变量;每创建一个Product对象,本质上先创建Unit1,Unit2,...UnitN,再把它们组合成所需的Product对象,因此需要n个createUnit()方法及一个组合方法composite();由于createUnit()及composite()是共性,因此可定义共同的生成器类接口,n个生成器类均从此接口派生即可。
(3)定义一个统一调度类,也叫指挥者类。是对生成器接口IBuild的封装。
生成器设计模式涉及4个关键角色:产品(Product)、抽象生成器(IBuild)、具体生成器(Builder)、指挥者(Director)。在生成器模式中,抽象生成器和具体生成器是必需的,指挥者类需要在实际问题中认真考虑,加以取舍。
[代码]java代码:
?
1 2 3 | public class Unit1 {}
public class Unit2 {}
public class Unit3 {}
|
[代码]java代码:
?
1 2 3 4 5 6 | // 定义一个产品类
public class Product {
Unit1 u1;
Unit2 u2;
Unit3 u3;
}
|
[代码]java代码:
?
1 2 3 4 5 6 7 | // 定义生成器类接口IBuild
public interface IBuild {
public void createUnit1();
public void createUnit2();
public void createUnit3();
public Product composite();// 返回值是Product对象
}
|
[代码]java代码:
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class BuildProduct implements IBuild {// 生成第一种Product
Product p=new Product();//Product 是成员变量
@Override
public void createUnit1() {
//p.u1=... // 创建Unit1
}
@Override
public void createUnit2() {
//p.u2=... // 创建Unit2
}
@Override
public void createUnit3() {
//p.u3=... // 创建Unit3
}
@Override
public Product composite() {
//... // 关联Unit1,Unit2,Unit3
return p; // 返回Product对象p
}
}
|
[代码]java代码:
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | public class Director {
private IBuild build;
public Director(IBuild build){
this.build=build;
}
public Product build(){
build.createUnit1();
build.createUnit2();
build.createUnit3();
return build.composite();
}
public static void main(String[] args) {
IBuild build=new BuildProduct();
Director direct=new Director(build);
Product p=direct.build();
}
}
|
2、利用Product派生类方法,也可以实现类似的生成功能。
[代码]java代码:
?
1 2 3 | public class Unit1 {}
public class Unit2 {}
public class Unit3 {}
|
[代码]java代码:
?
01 02 03 04 05 06 07 08 09 10 | // 定义抽象生成器
public abstract class Product {
Unit1 u1;
Unit2 u2;
Unit3 u3;
abstract void createUnit1(); // 表明子类要创建Unit1
abstract void createUnit2(); // 表明子类要创建Unit2
abstract void createUnit3(); // 表明子类要创建Unit3
abstract void composite(); // 表明子类要组合Unit1、Unit2、Unit3
}
|
[代码]java代码:
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // 定义具体生成器
public class BuildProduct extends Product{
@Override
void createUnit1() {
}
@Override
void createUnit2() {
}
@Override
void createUnit3() {
}
@Override
void composite() {
}
}
|
[代码]java代码:
?
01 02 03 04 05 06 07 08 09 10 11 12 13 | // 定义指挥者类
public class Director {
Product p;
public Director(Product p){
this.p=p;
}
void build(){
p.createUnit1();
p.createUnit2();
p.createUnit3();
p.composite();
}
}
|
原文链接:http://www.apkbus.com/blog-815579-61012.html