网新中英企业网站管理系统,wordpress留言时间不正确,页面设计规范,服装库存管理软件如果要构建的对象很复杂#xff0c;那么可以将整个构建过程拆分成多个步骤#xff0c;并为每一个步骤定义一个抽象的接口。并添加一个指导者用来控制构建产品的顺序和步骤。 Java实现#xff1a;
// 产品类
class Product {private String part1;private String part2;pub…
如果要构建的对象很复杂那么可以将整个构建过程拆分成多个步骤并为每一个步骤定义一个抽象的接口。并添加一个指导者用来控制构建产品的顺序和步骤。 Java实现
// 产品类
class Product {private String part1;private String part2;public void setPart1(String part1) {this.part1 part1;}public void setPar2(String part2) {this.part2 part2;}// 其他属性和方法
}// 抽象建造者接口
interface Builder {void buildPart1(String part1);void buildPart2(String part2);Product getResult();
}// 具体建造者类
class ConcreteBuilder implements Builder {private Product product new Product();Overridepublic void buildPart1(String part1) {product.setPart1(part1);}Overridepublic void buildPart2(String part2) {product.setPart2(part2);}Overridepublic Product getResult() {return product;}
}
// 指导者类
class Director {private Builder builder;public Director(Builder builder) {this.builder builder;}// 调用方法构建产品public void construct() {builder.buildPart1(Part 1);builder.buildPart2(Part 2);}
}public class Main {public static void main(String[] args) {// 创建指导者和建造者对象Builder builder new ConcreteBuilder();Director director new Director(builder);// 指导者构建产品director.construct();// 获取构建好的产品Product product builder.getResult();// 输出产品信息System.out.println(product);}
}【设计模式专题之建造者模式】4. 自行车加工
CPP版题解
#include iostream
#include string
using namespace std;class Bike {
public:string frame;string tires;void setFrame(const string frame) {this-frame frame;}void setTires(const string tires) {this-tires tires;}friend ostream operator (ostream os, const Bike bike) {os bike.frame bike.tires;return os;}
};class BikeBuilder {
public:virtual void buildFrame() 0;virtual void buildTires() 0;virtual Bike getResult() 0;
};class MountainBikeBuilder : public BikeBuilder {
private:Bike bike;
public:void buildFrame() override {bike.setFrame(Aluminum Frame);}void buildTires() override {bike.setTires(Knobby Tires);}Bike getResult() override {return bike;}
};
class RoadBikeBuilder : public BikeBuilder {
private:Bike bike;
public:void buildFrame() override {bike.setFrame(Carbon Frame);}void buildTires() override {bike.setTires(Slim Tires);}Bike getResult() override {return bike;}
};class BikeDirector {
public:Bike construct(BikeBuilder builder) {builder.buildFrame();builder.buildTires();return builder.getResult();}
};int main() {int N;cin N;BikeDirector director;for (int i 0; i N; i) {string bikeType;cin bikeType;BikeBuilder* builder;if (bikeType mountain) {builder new MountainBikeBuilder();} else {builder new RoadBikeBuilder();}Bike bike director.construct(*builder);cout bike endl;delete builder;}return 0;
}