原型模式
原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节(如下面的代码)
- Clone 一定要借助于拷贝构造函数(传入的对象参数必须以引用的方式传入) 才能实现.
- 一般在初始化的信息不发生变化的情况下,克隆是最好的办法,这既隐藏了对象创建的细节,又对性能能是大大的提升。
- 拷贝构造函数和原型模式的区别 :原型模式实现的是一个Clone 接口,注意是接口,也就是基于多态的 Clone 虚函数。也就是说原型模式能够通过基类指针来复制派生类对象。
- 拷贝构造函数完不成这样的任务。在继承场景下,Clone 函数可以定义为虚函数。
#include <iostream>
class Resume {
private:
std::string name;
std::string age;
std::string education;
public:
Resume()
{
std::cout << "Construct !" << std::endl;
};
Resume(const Resume& resume)
{
this->name = resume.name;
this->age = resume.age;
this->education = resume.education;
std::cout << "Copy Construct !" << std::endl;
}
void SetPersonalInfo(const std::string& name, const std::string& age)
{
this->name = name;
this->age = age;
}
void SetEducation(const std::string& educatoin)
{
this->education = educatoin;
}
void PrintResume()
{
std::cout << name << ", " << age << ", " << education << std::endl;
}
Resume* Clone()
{
return new Resume(*this);
}
};
int main()
{
Resume* p1 = new Resume();
p1->SetPersonalInfo("Tom", "25");
p1->SetEducation("master");
p1->PrintResume();
Resume* p2 = p1->Clone();
p2->SetPersonalInfo("Jack", "28");
p2->PrintResume();
}
单例模式
- 就是说一个类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
- 其优点是可以避免一个全局使用的类频繁创建与销毁,节省系统资源。
- 构造函数是私有的,防止外界再创建单例类对象
- 使用类的 静态 私有 指针 指向类的唯一实例
- 使用共有的静态方法获取该实例
- 总结为一点就是:隐藏类的构造函数,实现一个getinstance方法来让外界或者这个实例。
- 在初始化这个类的时候要注意,访问静态成员变量的时候 可以直接是用 类名::静态方法或静态属性 来访问
class Car
{
private:
std::string name;
std::string id;
int *p = new int[10];
//构造函数也应该是私有的
Car(std::string x, std::string y):name(x),id(y){
for(auto i = 0; i < 10; i++){
p[i] = i;
}
std::cout << "structure" << std::endl;
};
~Car(){
if(p != nullptr){
delete[] p;
}
std::cout<< "destory!" <<std::endl;
}
//使用一个静态 私有 指针指向唯一的实例;
private:
static Car* instance;
public:
static Car* getinstance(){
if(instance == nullptr){
instance = new Car("audi","鄂000329");
}
return instance;
}
std::string getname();
};
std::string Car::getname(){
return this->name;
}
//初始化Car
Car* Car::instance = Car::getinstance();
int main(){
std::cout<< Car::getinstance()->getname()<< std::endl;
std::cin.get();
}
工厂模式
- 专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。
- 工厂父类负责定义创建产品对象的公告接口,而工厂子类负责生成具体的产品对象。
- 目的是将产品的实例化操作延迟到工厂子类中完成,通过工厂子类来确定究竟应该实例化哪一个具体产品类。
版权声明:本文为qq_43964318原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。