右面是某网站建设立项需求山西笑傲网站建设
web/
2025/10/1 1:55:55/
文章来源:
右面是某网站建设立项需求,山西笑傲网站建设,带注册的网站需要多大空间,ui设计培训班有用吗目录
1、建造者模式含义
2、建造者模式的讲解
3、使用C实现建造者模式的实例
4、建造者模式的优缺点
5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…目录
1、建造者模式含义
2、建造者模式的讲解
3、使用C实现建造者模式的实例
4、建造者模式的优缺点
5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process can create different representations. 将一个复杂对象的构建过程与其表示分离使得同样的构建过程可以创建不同的表示。 其实上面这句话本身是有点晦涩难懂后面在网上看到有人这样说便留下深刻的印象
当一个类的构造函数参数个数超过4个而且这些参数有些是可选的参数考虑使用构造者模式。
这个解释也可以理解为应用场景当我们单纯懂得设计模式怎么实现并不重要重要的是要知道适用于什么场景这个就得靠一些经验和思考了。
2、建造者模式的讲解 从上面的UML可以看出建造者模式涉及到以下四个角色的概念
1抽象建造者角色提供一个接口规范产品对象的建造一般由子类实现。一般来说产品的组成部分数与建造方法数相同即有多少组成部分就有多少个建造方法。
2具体建造者角色该角色实现了抽象建造者抽象建造者接口主要是实现所有声明的方法以及返回建造好的产品实例。
3导演者角色负责调用具体建造者按照顺序建造产品。导演者只负责调度真正执行的是具体建造者角色。
4产品角色该角色是建造的复杂对象提供基本方法。
3、使用C实现建造者模式的实例 #include iostream
#include string// 产品类
class Product {
public:void setPartA(const std::string partA) {m_partA partA;}void setPartB(const std::string partB) {m_partB partB;}void setPartC(const std::string partC) {m_partC partC;}void show() const {std::cout Product Parts: m_partA , m_partB , m_partC std::endl;}private:std::string m_partA;std::string m_partB;std::string m_partC;
};// 抽象建造者类
class Builder {
public:virtual void buildPartA() 0;virtual void buildPartB() 0;virtual void buildPartC() 0;virtual Product* getResult() 0;
};// 具体建造者类
class ConcreteBuilder : public Builder {
public:void buildPartA() override {m_product-setPartA(Part A);}void buildPartB() override {m_product-setPartB(Part B);}void buildPartC() override {m_product-setPartC(Part C);}Product* getResult() override {return m_product;}private:Product* m_product new Product();
};// 指挥者类
class Director {
public:void construct(Builder* builder) {builder-buildPartA();builder-buildPartB();builder-buildPartC();}
};int main() {Director director;ConcreteBuilder builder;director.construct(builder);Product* product builder.getResult();product-show();delete product;return 0;
}在上述示例中我们定义了一个产品类Product它有三个部分Part A、Part B、Part C。然后我们定义了一个抽象建造者类Builder其中包含了构建产品各个部分的纯虚函数。接着我们实现了具体的建造者类ConcreteBuilder它实现了抽象建造者类的纯虚函数并负责构建产品对象。最后我们定义了一个指挥者类Director它负责调用建造者的方法来构建产品。
在主函数中我们创建了一个具体的建造者对象并将其传递给指挥者对象。指挥者根据具体的建造者对象来构建产品最终得到一个完整的产品对象。我们可以通过产品对象的show()方法来展示产品的各个部分。
这就是一个简单的建造者模式的C源码示例
4、建造者模式的优缺点
1优点
1分离构建过程和表示建造者模式可以将一个复杂对象的构建过程与其表示分离使得同样的构建过程可以创建不同的表示形式。这样可以提高代码的灵活性和可维护性。
2更好的封装性通过建造者模式可以将对象的构建过程封装在具体的建造者类中客户端只需要与指挥者进行交互无需关心具体的构建细节。这样可以隐藏对象的创建过程提供更好的封装性。
3可以控制构建过程建造者模式允许你逐步构建对象并在每个步骤中进行必要的操作、检查或验证。这样可以更加灵活地控制对象的构建过程满足不同的需求。
4创建不同表示形式的对象通过定义不同的建造者和指挥者可以根据需求定制不同的构建过程创建不同的产品表示形式。这样可以提供更多的选择和灵活性。
2缺点
1增加了代码量使用建造者模式会增加额外的类和接口从而增加了代码量。如果对象的构建过程比较简单使用建造者模式可能会显得过于繁琐。
2增加了系统复杂性引入建造者模式会增加系统的复杂性因为需要定义多个类和接口并且需要协调指挥者和建造者之间的关系。这可能会增加理解和维护的难度。
3不适用于创建简单对象如果对象的构建过程比较简单只有少量的步骤或参数使用建造者模式可能会显得过于繁琐。此时直接使用简单工厂或工厂方法模式可能更加合适。
总的来说建造者模式通过分离构建过程和表示提供了更好的封装性和灵活性可以控制构建过程并创建不同表示形式的对象。然而它也增加了代码量和系统复杂性不适用于创建简单对象。
5、建造者模式VS工厂模式
建造者模式和工厂模式是两种常见的创建型设计模式它们有以下几点区别
1目的不同工厂模式关注的是创建对象的过程将对象的创建逻辑封装在一个工厂类中通过工厂类来创建具体的对象。而建造者模式关注的是创建复杂对象的过程将对象的构建过程与其表示分离通过指挥者和建造者来逐步构建对象。
2对象复杂度不同工厂模式适用于创建简单对象通常只需要一两个步骤即可完成对象的创建。而建造者模式适用于创建复杂对象对象的构建过程需要多个步骤并且可以根据需求定制不同的构建过程。
3调用方式不同工厂模式通过调用工厂类的方法来创建对象客户端直接与工厂类交互。而建造者模式通过指挥者来控制建造者的构建过程客户端只需要与指挥者进行交互无需直接与建造者类交互。
4灵活性不同工厂模式相对较为灵活可以根据需要扩展和添加新的产品类型只需要添加对应的具体产品和工厂类即可。而建造者模式相对更加灵活可以根据需要定制不同的构建过程创建不同的产品表示形式。
总的来说工厂模式适用于创建简单对象将对象的创建过程封装在工厂类中而建造者模式适用于创建复杂对象通过指挥者和建造者来分步构建对象。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84769.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!