建造者模式
是一种创建型设计模式,它的主要目的是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式是为了解决在编程中一些复杂对象的创建和表示的问题。
当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,考虑使用建造者模式
以下是使用C++实现建造者模式的一个例子,这里我们以创建一个简单的汽车为例。
首先,我们定义一个产品类,也就是我们要创建的复杂对象:
1 | class Car { |
然后,我们定义一个抽象建造者类,定义创建复杂对象的各个部分的接口:
1 | class CarBuilder { |
接着,我们创建具体的建造者类,实现抽象建造者接口,提供具体的实现:
1 | class SportsCarBuilder : public CarBuilder { |
最后,我们创建指挥者类,用来规范产品对象的创建流程:
1 | class Director { |
在客户端代码中,我们可以像下面这样使用建造者模式来创建产品:
1 | int main() { |
在这个例子中,我们将汽车的创建过程(即引擎、车身和轮胎的创建)和汽车对象的表示(即汽车对象)分离开来。客户端代码不需要知道汽车是如何创建的,只需要通过指挥者和具体的建造者就可以得到汽车对象。
总结:
通过将具体建造者对象传递给指挥者对象,在具体建造者对象中完成复杂对象的创建
原型模式是一种创建型设计模式,它用于创建重复的对象,同时又能保证性能。这种类型的设计模式提供了一种创建对象的最佳方式。这种模式涉及到一个原型类,该类负责创建对象的克隆。
在C++中,我们可以使用复制构造函数来实现原型模式。下面是一个简单的示例:
1 | cppCopy code |
在这个示例中,首先我们定义了一个原型基类 Prototype
,它有一个纯虚函数 clone()
,这个函数将被派生类实现以返回一个新的对象。
然后我们定义了一个具体的原型类 ConcretePrototype
,它继承自 Prototype
,并实现了 clone()
方法。它的 clone()
方法使用了复制构造函数来创建一个新的 ConcretePrototype
对象,并返回它。
在 main()
函数中,我们首先创建了一个 ConcretePrototype
对象 prototype
,然后我们调用 prototype
的 clone()
方法来创建一个新的 ConcretePrototype
对象 clonedPrototype
。然后我们可以看到,prototype
和 clonedPrototype
的值是一样的,这证明了 clone()
方法成功地复制了 prototype
对象。
原型模式主要用于减少创建对象的开销,尤其是在创建大量重复对象时,通过复制已有对象来生成新对象,可以提高性能。