我是老温,一名热爱学习的嵌入式工程师
关注我,一起变得更加优秀!
1 - 什么是原型模式?
原型模式(Prototype Pattern),是属于创建型模式的一种。原型模式主要是使用了原型对象实例,来指定被创建对象的种类,并且通过拷贝原型对象的方式,来创建新的对象。
顾名思义,就是在创建一个新的对象的时候,先要有一个模板,这个模板被称作“原型”,后续被创建的新对象,就是依据这个“原型”进行创建的。
在原型模式里面,原型模板提供了一个克隆接口,方便通过已经存在的对象进行新对象的创建,也就是说,在创建一个新对象的时候,直接克隆原型对象就可以了,本质上隐藏了对象创建的细节,又大大提高了性能。
举个例子,原型模式就像文件复印一样,我们在进行复印时,需要先有一个模板放到打印机里面,然后打印机就会根据我们提供的模板,进行一模一样的复印操作,而我们不需要具体知道打印机的复印原理和复印过程。
图片来源:网络
原型模式主要涉及三种角色分类:原型抽象角色、原型实例角色、客户端角色,以下是这三种角色的说明。
原型抽象角色:对原型模板的抽象,也就是说,把原型对象必须要实现的接口抽象出来,例如在prototype.h文件中抽象出来的结构体。
原型实例角色:由原型抽象角色定义出来的,供客户端角色使用的原型实例对象,也就是实实在在的模板,由原型构造函数进行构建。
客户端角色:调用原型实例角色的客户端程序,在例程里面就是main函数。
2 – 什么情况下要用原型模式?
当需要创建一个与原型一模一样的对象,而不想调用对象创建的构造函数,就可以使用原型模式,
即使原型的属性和状态发生改变,也可以创建出一个与原型当前状态一致的新对象。
使用原型模式可以省去一系列对象构建的复杂操作,开发者在创建对象的时候,不需要关心对象创建的具体过程和细节。
3 – 如何使用原型模式?
还是复印试卷文件为例,在进行试卷复印之前,需要先提供一份试卷原型模板,然后打印机才能根据模板复印出多份一模一样的试卷。
原型模式主要涉及到3种角色,分别是原型抽象角色、原型实例角色、客户端角色,主要对这三种角色进行代码编写工作。