建造者模式中指挥者类的作用 男娘i 2021-09-16 10:32 258阅读 0赞 在学习建造者模式时,一直有一个问题想不明白,就是为什么要存在指挥者类。感觉没有指挥者类也完全同样的简单快捷,甚至比没有指挥者类更容易理解。 以下是本人用C++写的一个例子程序: //Builder.cpp //运用了建造者模式 \#include <iostream> using namespace std; class Automobile//抽象汽车类 \{ public: virtual ~Automobile()\{cout<<"destruction automobile"<<endl;\} virtual void BuildWheel()=0; //建造车轮 virtual void BuildBody()=0; //建造车身 virtual void BuildVehicle()=0; //建造车壳 protected: Automobile()\{\} \}; class Car:public Automobile \{ public: virtual void BuildWheel() \{ cout<<"build the wheel of car"<<endl; \} virtual void BuildBody() \{ cout<<"build the body of car"<<endl; \} virtual void BuildVehicle() \{ cout<<"build the Vechicle of car"<<endl; \} ~Car()\{cout<<"destruction car"<<endl;\} \}; class Truck:public Automobile \{ public: virtual void BuildWheel() \{ cout<<"build the wheel of Truck"<<endl; \} virtual void BuildBody() \{ cout<<"build the body of Truck"<<endl; \} virtual void BuildVehicle() \{ cout<<"build the Vechicle of Truck"<<endl; \} ~Truck()\{cout<<"destruction truck"<<endl;\} \}; class Director //指挥者类,指挥车的生产过程 \{ public: Director(Automobile \*p):pAm(p)\{\} void Build() \{ pAm->BuildBody(); pAm->BuildWheel(); pAm->BuildVehicle(); \} private: Automobile \*pAm; \}; int main() \{ Truck \*pTk(new Truck); Director D(pTk); D.Build(); delete pTk; system("pause"); return 0; \} 以下是不用指挥者类的实现: //test.cpp \#include <iostream> using namespace std; class Automobile \{ public: virtual ~Automobile()\{cout<<"destruction automobile"<<endl;\} virtual void BuildWheel()=0; virtual void BuildBody()=0; virtual void BuildVehicle()=0; void Build() //把在指挥者中完成的指挥生产的功能在父类中实现 \{ BuildBody(); BuildWheel(); BuildVehicle(); \} protected: Automobile()\{\} \}; class Car:public Automobile \{ public: virtual void BuildWheel() \{ cout<<"build the wheel of car"<<endl; \} virtual void BuildBody() \{ cout<<"build the body of car"<<endl; \} virtual void BuildVehicle() \{ cout<<"build the Vechicle of car"<<endl; \} \}; class Truck:public Automobile \{ public: virtual void BuildWheel() \{ cout<<"build the wheel of Truck"<<endl; \} virtual void BuildBody() \{ cout<<"build the body of Truck"<<endl; \} virtual void BuildVehicle() \{ cout<<"build the Vechicle of Truck"<<endl; \} ~Truck()\{cout<<"destruction truck"<<endl;\} \}; int main() \{ \{ Truck \*pTk(new Truck); pTk->Build(); delete pTk; \} system("pause"); return 0; \} 这样一看也没什么不可,那么为什么需要指挥者类呢?一翻思考后...... 以下是我的一点思考,小弟初学设计模式,有不对的地方,还望指出。 1、如果子类有很多的话,例如有1000个,那么若不用指挥者类,就有可能带来代码膨涨的问题,因为test.cpp中Automobile类的Build函数有1001份代码。 2、就是当需要改变一个产品的内部表示时,如果不用指挥者类,则需要改变Automobile类中的Build函数,从而违背了开放-封闭原则。而使用指挥者类的建造者模式,则只需要再定义一个具体的建造者就行了。再有甚者,如果一个产品的生产过程不是唯一的,例如,以后科技发展迅速,车子不用轮,但是有人喜欢有轮的车子,有人喜欢没轮的车子,那么就只定义多一个指挥类就行了,而若不用指挥者类,则需要在Automobile类中再添加一个Build函数。灵活就大大下降了。 再来看看建造者模式的表述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。 用了建造者模式,用户只需指定需要建造的类型就可以得到它们,而具体的过程和细节就不需要知道了。而建造者中的一个非常重要的类就是指挥者类,它用来控制建造过程,也用它来隔离用户与建造过程的关联。 个人认为,指挥者类是建造模式的核心和灵魂所在,从上面的例子可以看到,如果缺少指挥者类,那么就不能算是建造者模式了,只能说是定义了一个接口或抽象类,规定了必须实现哪些功能罢了(如果 撇开模板方法模式是行为型模式,而建造者模式是创建型模式来谈,上面test.cpp实现的就是一个模板方法模式)。指挥者类,不仅指出了对象的建造顺序,还把用户与建造过程分离,并为可能发生的变化提供了一个灵活的处理方法,使建造顺序的改变或需求的改变不会引起大的改动也不会改变程序的结构。
相关 建造者模式 定义 将一个复杂对象的构造与它的表示分离,是的同样的构建过程可以创建不同的表示。 类型:创建型 建造者模式与工厂模式有些类似: 建造者更注重:方法的调用顺序,关心创 「爱情、让人受尽委屈。」/ 2022年02月15日 19:25/ 0 赞/ 314 阅读
相关 建造者模式 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] 1、产品类 package com.hhdys r囧r小猫/ 2022年01月14日 22:37/ 0 赞/ 275 阅读
相关 建造者模式 建造者模式,又称为生成器模式,是一种较为复杂、使用频率不高的创建型模式。它为客户端返回的不是一个简单的产品,而是有多个部件组成的复杂产品。以手机为例,建造者模式返回的是一个完整 谁践踏了优雅/ 2021年12月10日 18:29/ 0 赞/ 287 阅读
相关 建造者模式 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 柔光的暖阳◎/ 2021年09月29日 16:04/ 0 赞/ 357 阅读
相关 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Buil 向右看齐/ 2021年09月17日 01:24/ 0 赞/ 403 阅读
相关 建造者模式 4.建造者模式 ![70][] class Customer { static void Main(string[] a 女爷i/ 2021年09月16日 23:52/ 0 赞/ 415 阅读
相关 建造者模式中指挥者类的作用 在学习建造者模式时,一直有一个问题想不明白,就是为什么要存在指挥者类。感觉没有指挥者类也完全同样的简单快捷,甚至比没有指挥者类更容易理解。 以下是本人用C++ 男娘i/ 2021年09月16日 10:32/ 0 赞/ 259 阅读
相关 建造者模式 建造者模式 1. 简介 2. 建造者模式介绍 2.1 定义 2.2 建造者模式的优点 2.3 建造者模式的缺点 ﹏ヽ暗。殇╰゛Y/ 2021年08月30日 22:18/ 0 赞/ 551 阅读
相关 建造者模式 一 点睛 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naG 怼烎@/ 2021年07月24日 18:01/ 0 赞/ 460 阅读
相关 建造者模式 造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Bu... 小灰灰/ 2020年06月13日 05:36/ 0 赞/ 782 阅读
还没有评论,来说两句吧...