[设计模式笔记]一. 创建型模式--4.Builder模式(二)

场景:


假设直升飞机由机头机身机尾, 螺旋桨垂直起降系统组成战斗机由机头机身机尾喷气系统组成两种飞机的生产过程都是生产机头机身机尾螺旋桨/喷气系统垂直起降系统然后组装, (也就是说两种飞机的组成有一点区别但是生产步骤流程极为相似).

这个场景就符合Builder模式(使用相同的生产流程生产不同的飞机).


角色:


CPlaneDirector负责飞机部件的生产流程调用CPlanBuilder提供的接口.

CPlanBuilder提供生产各个部件接口.

CHelicopterBuilderCBattlePlaneBuilder用于生产对应飞机部件的类.

CHelicopterCBattlePlane 要生成的复杂对象(由各自的部件组成但是生成流程相同或者相似).


[设计模式笔记]一. 创建型模式--4.Builder模式(二)_第1张图片

如图:

使用:


// 伪代码

pBuilder = new CHelicopterBuilder;

pCPlaneDirector = new CPlaneDirector(pBuilder)

// 调用生产流程函数

pCPlaneDirector->MakePlane(); // 这个函数封装了通用的生产流程

// 完成后飞机已经被生产出来使用builder返回飞机

CHelicopter* pCHelicopter = pBuilder->GetHelicopter();

// 上面的代码解耦的地方只有MakePlane (构建于表示分离)


我的理解:


1. 抓住Builder模式与Abstact Factory模式的区别是Builder同一个创建过程可以创建不同的表示Abstract Factory 模式是可以创建一系列相关或相互依赖的对象, Builder模式强调的是同一个创建流程, Abstract Factory模式强调的是一系列.

2. 在设计时可能两个复杂的对象的生成流程不是完全一致的但是可以根据实际情况来折中例如直升飞机与战斗机的部件组成并没有完全一样在生成直升飞机时调用BuildWhiffSys()并没有任何意义但是为了生产流程的一致性, CBattlePlaneBuilder可以实现一个什么都不敢的BuildWhiffSys()函数这里更好的办法是在CPlaneBuilder实现什么都不做的"接口", 而具体的Builder更具它自己生产的对象的部件实现对应的接口.

3. 我始终觉得能为了模式而模式适合就好不能硬邦邦的套用模式要根据自己的实际情况而使用.



你可能感兴趣的:(builder,创建型模式,设计模式笔记)