首页 > 其他分享 >创建型设计模式-原型模式

创建型设计模式-原型模式

时间:2023-12-19 19:04:54浏览次数:34  
标签:对象 创建 Shape 原型 图形 设计模式

原型设计模式是一种对象创建型模式,它通过复制现有对象创建新的对象,而无需显式地调用构造函数。

简单来说,原型设计模式就是通过克隆已有对象来创建新对象。

创建型设计模式-原型模式_C++类与对象

举一个通俗易懂的例子,假设我们有一个图形库,其中有一个基类 Shape 表示图形, 它有一个纯虚函数 draw() 用于绘制图形。

现在我们希望能够复制已有的图形对象来创 建新的图形对象,而无需重新构造图形对象

// 图形基类
class Shape {
public:
	virtual ~Shape() {}
	virtual void draw() = 0;
	virtual Shape* clone() = 0;
};

// 圆形类
class Circle : public Shape {
private:
	std::string color;
	int radius;
public:
	Circle(std::string color, int radius) : color(color), radius(radius) {}
	void draw() override {
		std::cout << "Drawing a circle with color " << color << " and radius " << radius
			<< std::endl;
	}
	Shape* clone() override {
		return new Circle(*this);
	}
};

int main() {
	// 创建一个原型对象
	Shape* circlePrototype = new Circle("red", 5);
	// 克隆原型对象来创建新对象
	Shape* circle1 = circlePrototype->clone();
	Shape* circle2 = circlePrototype->clone();

	// 绘制图形
	circle1->draw(); // Output: Drawing a circle with color red and radius 5
	circle2->draw(); // Output: Drawing a circle with color red and radi

	delete circlePrototype;
	delete circle1;
	delete circle2;
}

在上述代码中,我们定义了一个图形基类 Shape,它声明了纯虚函数 draw 和 clone。

然后我们创建了一个具体的图形类 Circle,它继承自 Shape,并实现 了 draw 和 clone 函数

在 main 函数中,我们首先创建了一个原型对象 circlePrototype,然后通过调

用 clone 方法来创建了两个克隆对象 circle1 和 circle2。最后,我们分别调用 了 draw 方法来绘制图形。

通过原型设计模式,我们可以通过复制已有的图形对象来创建新的图形对象,而无需重

新构造图形对象。这样可以提高对象创建的效率,并且可以动态地添加新的图形对象。 原型设计模式的应用场景通常包括以下情况:

  1. 创建对象的过程比较复杂,且需要频繁地创建相似对象。原型设计模式可以通过复制已有对象来创建新对象,避免了复杂的创建过程,提高了创建对象的效率。
  2. 需要动态地添加新的对象,而且这些对象的类型在运行时才能确定。原型设计模式通过克隆已有对象来创建新对象,可以在运行时动态地添加新的对象类型,而无需显式地调用构造函数


典型应用场景的举例

1,图形编辑器:

在图形编辑器中,可能需要频繁地创建相似的图形对象,如矩形、圆 形等。使用原型设计模式,可以先创建一个原型对象,并通过克隆原型对象来创建新的 图形对象,而无需重新构造对象。

2,缓存系统:

在缓存系统中,可能需要频繁地复制已有的缓存对象来创建的缓存对象。使用原型设计模式,可以通过克隆已有的缓存对象来创建新的缓存对象,而无需重 新从数据库或其他地方获取数据。

3,原始对象的状态保存:

有时候需要保存对象的某个特定状态,以便在需要时恢复回来。原型设计模式可以通过克隆对象来保存和恢复对象的状态,而不需要手动记录和恢复每个属性的值。

总结

原型设计模式适用于需要频繁地创建相似对象或动态地添加新对象的场景。

它可以通过复制已有对象来创建新对象,避免了复杂的创建过程,并且可以在运行时动态地添加新的对象类型。

但是缺点就是:每个类都需要实现clone()方法。

标签:对象,创建,Shape,原型,图形,设计模式
From: https://blog.51cto.com/u_15172160/8891964

相关文章

  • 深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
    Python中的面向对象编程涉及许多特殊方法,其中__new__和__init__是两个关键的方法。它们分别负责对象的创建和对象的初始化,在对象的生命周期中扮演着不同而又互补的角色。让我们深入探讨这两个方法,了解它们的作用、区别以及如何在实际开发中应用。1. __new__方法当谈到Pyth......
  • 解决“未能创建 SSL/TLS 安全通道”异常
    之前写了一个桌面程序,程序会间歇性访问某个https接口,一直用的好好的,今天突然报错了,异常就发生在访问接口的地方,曰“请求被中止,未能创建 SSL/TLS安全通道。”,另外有台电脑也有跑该程序,也是同样的报错,看来是接口方改动过什么了。搜索一番,原因应该是,接口方变更了安全协议,而客户端......
  • 界面控件DevExpress WPF Dock组件,轻松创建类Visual Studio窗口界面!
    本文主要为大家介绍DevExpressWPF控件中的Dock组件,它能帮助用户轻松创还能受MicrosoftVisualStudio启发的Dock窗口界面。P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用......
  • 设计模式的七大原则
    目的:使程序高内聚、低耦合、高重用、高灵活,可维护性好,可扩展性高。设计模式的三种类型:创建型:单例、工厂、抽象工厂、原型、建造者结构型:适配器、桥接、装饰、组合、外观、享元、代理行为型:模板法、命令、访问者、迭代器、观察者、中介者、备忘录、解释器、状态、策略、责任链......
  • 设计模式复习
    单一职责原则(SingleResponsibilityPrinciple)定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能......
  • 设计模式复习
    简单工厂模式一。定义:1.又被称作静态方法模式2.根据参数不同返回不同类的实例3.实例通常具有相同的父类二。模式角色:工厂角色:抽象产品:具体产品:三。类图工厂角色和具体产品为依赖关系。具体产品和抽象产品为实现关系。工厂模式一。定义:1.又被称为多态工厂和虚拟构造器......
  • Python:设计模式
    一、设计模式与面向对象1.1设计模式  软件设计阶段针对反复出现的问题提出的统一解决方案。每类问题的解决方案都被系统的命名为XX设计模式。1.2面向对象  按照一件事的组成元素分别制作进行组装。这些元素分为属性与接口。1.2.1三大特性  封装:将对象封装为类,将对......
  • 自动化文件管理:使用Python创建匹配Excel数据的文本文件
    介绍在日常工作中,我们经常需要处理大量的数据和文件。尤其是在处理涉及多层嵌套目录和数据文件时,手动操作变得极其繁琐和耗时。为了提高效率,自动化这一过程显得尤为重要。本博客介绍了一个实用的Python脚本,它能够自动读取Excel表格中的数据,并在相应的文件夹中创建文本文件。这个......
  • C++图的邻接表创建
    C++图的邻接表存储结构typedefstructNode{ intnextVex; structNode*next; }*node;structHeadNode{ Eelement; structNode*next;};typedefstructGraphTable{ intvex,edge; structHeadNodeVertex[MAXV];}*Graph;图的创建函数Graphcreate(){ Grap......
  • 2023-12-18设计模式概述
                 ......