原型模式是一种创建型设计模式,使用它可以复制已有对象,并且不需要依赖已有对象所属的类。如果需要复制一个对象,该怎么做呢?称想要复制的对象为对象A,复制得到的对象为对象B。分为两步:用A的类新建一个实例对象,这个对象就是B把A的所有属性值都赋值给B。复制结束。这两步每一步都有问题,第一步当前代码必须能够访问A所属的类,有一种场景,方法的参数是接口类型,一个类只要实现了接口,其对象就可以作为参数传递。这时方法里的代码无法访问参数的实际类型。第二步,A所属的类有些属性是私有的。从外部无法访问。解决办法:原型模式原型模式将上门的两步从A类外转移到A类内,那么上面两步的问题就不存在了。声明一个包含克隆方法的通用接口interface,让A的类实现这个接口。当需要A的克隆对象时,只需要A调用克隆方法即可。类图:代码示例:#include <iostream> #include <string> // 1. 原型接口 class Prototype { public: virtual Prototype* clone() const = 0; virtual
工厂方法(Factory Method)是一种创建型设计模式,它提供了对对象创建的代码的封装,通过定义对象创建的接口来实现。具体创建代码封装在实现对象创建接口的类中。实际使用中创建新的对象的操作也可以从缓存里取或者其他的方式。以下是工厂方法模式的一般结构和角色:产品接口(Product): 定义了工厂方法创建的对象的共同行为。这是工厂方法所创建对象的共同父类或接口。具体产品(ConcreteProduct): 实现了产品接口的具体类,是工厂方法所创建的对象。工厂接口(Creator): 声明了一个创建对象的工厂方法,该方法返回一个产品接口类型的对象。这可以是抽象类或接口。具体工厂(ConcreteCreator): 实现了工厂接口,负责实际创建产品对象的类。它含有与具体产品相关的逻辑。类图示例代码#include <iostream> // 1. 产品接口 class Car { public: virtual void drive() const = 0; }; // 2. 具体产品 class Sedan : public Car { public: