标签:
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)。在生成器模式中,抽象生成器和具体生成器是必需的,指挥者类需要在实际问题中认真考虑,加以取舍。
1
2
3
|
public class Unit1 {} public class Unit2 {} public class Unit3 {} |
1
2
3
4
5
6
|
//定义一个产品类 public class Product { Unit1 u1; Unit2 u2; Unit3 u3; } |
1
2
3
4
5
6
7
|
//定义生成器类接口IBuild public interface IBuild { public void createUnit1(); public void createUnit2(); public void createUnit3(); public Product composite(); //返回值是Product对象 } |
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 } } |
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派生类方法,也可以实现类似的生成功能。
1
2
3
|
public class Unit1 {} public class Unit2 {} public class Unit3 {} |
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 } |
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() { } } |
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.cnblogs.com/android-blogs/p/5631911.html