手记

设计模式Day02

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

0人推荐
随时随地看视频
慕课网APP