设计模式(3)-建造者模式及实现

设计模式(3)-建造者模式及实现


基本概念

提供了一种将一个复杂对象的构建过程与其表示分离的方法。它将对象的构建过程封装在一个独立的"建造者"类中,由该类负责逐步构建对象。这样,可以根据需要创建不同的建造者来构建不同的对象变体。
优点:
● 分离构建过程和表示:通过建造者模式,可以将复杂对象的构建过程与其最终表示分离,使得构建过程更加清晰可控。
● 支持不同的表示:通过使用不同的具体建造者,可以创建不同的产品表示,而不改变客户端的代码。
● 更好的可扩展性:如果需要添加新的产品变体,只需创建一个新的具体建造者即可,而无需修改已有的代码。
● 隐藏产品的内部结构:客户端只需与抽象建造者和指导者交互,无需关心产品的内部构建细节。

https://gitee.com/want-to-lose-another-30-jin/design-pattern-implementation

设计模式具体实现


角色

1、Builder(建造者):定义创建复杂对象的接口,通常包含创建对象的各个部分的步骤。
2、ConcreteBuilder(具体建造者):实现Builder接口,具体定义构建对象的步骤和细节。
3、Product(产品):表示被构建的复杂对象。
4、Director(指挥者):负责构建对象的步骤,使用Builder接口来创建对象,不依赖于具体建造者的实现。

java实现

package com.shejimoshi.jianzaozhemoshi;
// 产品类
public class Car {
    private String engine;
    private String tires;
    private String color;

    // Setter方法
    public void setEngine(String engine){
        this.engine = engine;
    }

    public void setTires(String tires){
        this.tires = tires;
    }

    public void setColor(String color){
        this.color = color;
    }


    // Getter方法
    public String getEngine() {
        return engine;
    }
    public String getTires() {
        return tires;
    }
    public String getColor() {
        return color;
    }
}

package com.shejimoshi.jianzaozhemoshi;
//抽象的建造者
public interface CarBuilder {
    /**
     * 组合Car
     */
    Car car = new Car();

    void buildEngine();

    void buildTires();

    void buildColor();


    public Car build();

}

package com.shejimoshi.jianzaozhemoshi;
// 具体建造者
public class ConcreteCarBuilder implements CarBuilder {
    Car car=new Car();
    @Override
    public void buildEngine() {
        car.setEngine("v8");
    }

    @Override
    public void buildTires() {
        car.setTires("Alloy");
    }

    @Override
    public void buildColor() {
        car.setColor("red");
    }

    @Override
    public Car build() {
        return car;
    }
}

package com.shejimoshi.jianzaozhemoshi;
// 指挥者
public class CarDirector {
    public Car construct(CarBuilder builder) {
        builder.buildEngine();
        builder.buildColor();
        builder.buildTires();
        return builder.build();
    }
}

package com.shejimoshi.jianzaozhemoshi;

public class Client {
    public static void main(String[] args) {
        // 创建指挥者对象
        CarDirector director = new CarDirector();

        // 创建具体建造者对象
        ConcreteCarBuilder builder = new ConcreteCarBuilder();

        // 使用指挥者来构建汽车对象
        Car car = director.construct(builder);

        // 打印汽车的属性,以验证对象是否正确构建
        System.out.println("Car created with:");
        System.out.println("Engine: " + car.getEngine());
        System.out.println("Tires: " + car.getTires());
        System.out.println("Color: " + car.getColor());
    }
}

c++实现


#include<iostream>
#include <string>
using namespace std;
class Car
{
private:
	string engine;
	string color;
	string tires;
public:
	void setColor(string color) {
		this->color = color;
	}

	void setEngine(string engine) {
		this->engine = engine;
	}

	void setTires(string tires) {
		this->tires = tires;
	}

	// Getter方法
	string getEngine() 
	{ 
		return engine; 
	}
	string getTires() 
	{ 
		return tires; 
	}
	string getColor() 
	{ 
		return color;
	}
};

class CarBuilder
{
public:
	Car car;
	virtual void buildEngine() = 0;
	virtual void buildTires() = 0;
	virtual void buildColor() = 0;
	virtual Car build() = 0;
	virtual ~CarBuilder() {}
};

class ConcreteCarBuilder : public CarBuilder
{
public:
	Car car;
	void buildEngine() override
	{
		car.setEngine("v8");
	}

	void buildTires() override
	{
		car.setTires("Alloy");
	}

	void buildColor() override
	{
		car.setColor("red");
	}

	Car build() override
	{
		return car;
	}
};

class CarDirector
{
public:
	Car construct(ConcreteCarBuilder builder)
	{
		builder.buildEngine();
		builder.buildColor();
		builder.buildTires();
		return builder.build();
	}
};

int main() {
	// 创建指挥者对象
	CarDirector director;

	// 创建具体建造者对象
	ConcreteCarBuilder builder;

	// 使用指挥者来构建汽车对象
	Car car = director.construct(builder);

	// 打印汽车的属性,以验证对象是否正确构建
	cout << "Car created with:" << endl;
	cout << "Engine: "<< car.getEngine() << endl;
	cout << "Tires: "<< car.getTires() << endl;
	cout << "Color: " << car.getColor() << endl;

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值