原型模式(C++)
Posted 顾文繁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式(C++)相关的知识,希望对你有一定的参考价值。
产生背景
在软件系统中,很多时候我们需要创建某一个类型的对象,为了简化创建过程,可以只创建一个对象,然后通过克隆的方式复制出其他的对象,这就是原型模式的设计思想。
模式定义
原型模式是一种对象创建型模式,用原型模式制定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。
UML类图
模式结构
1. Prototype(抽象原型)
可以是接口或者抽象类,是所有具体原型类型的公共父类。
1.ContretePrototype(具体抽象类)
具体圆形类实现具体的克隆方法,在克隆方法中返回一个自己的克隆对象。
3.Client
使用克隆
原型模式案例(克隆猴子C++实现)
Prototype.h
#ifndef PATTERN_DESIGN_PROTOTYPE_H
#define PATTERN_DESIGN_PROTOTYPE_H
class Prototype{
virtual Prototype* clone() = 0;
};
#endif //PATTERN_DESIGN_PROTOTYPE_H
Monkey.h
class MonkeyPrototype : public Prototype{
public:
MonkeyPrototype(){}
MonkeyPrototype(const MonkeyPrototype& monkeyPrototype);
virtual MonkeyPrototype* clone();
void show_info(){
std::cout << name << " , age = " << age << std::endl;
}
int age;
std::string name;
};
Monkey.cpp
#include "MonkeyPrototype.h"
MonkeyPrototype::MonkeyPrototype(const MonkeyPrototype& monkeyPrototype){
age = monkeyPrototype.age;
name = monkeyPrototype.name;
}
MonkeyPrototype* MonkeyPrototype::clone() {
return new MonkeyPrototype(*this);
}
client.h
#ifndef PATTERN_DESIGN_PROTOTYPE_TEST_H
#define PATTERN_DESIGN_PROTOTYPE_TEST_H
#include "Prototype.h"
#include "MonkeyPrototype.h"
void test_prototype(){
MonkeyPrototype* monkey = new MonkeyPrototype;
monkey->name = "hello";
monkey->age = 18;
MonkeyPrototype* clone = monkey->clone();
clone->show_info();
}
#endif //PATTERN_DESIGN_PROTOTYPE_TEST_H
以上是关于原型模式(C++)的主要内容,如果未能解决你的问题,请参考以下文章