设计模式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();
     }
}

转载于:https://www.cnblogs.com/android-blogs/p/5631911.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值