【设计模式 05】原型模式

有的时候,我们创建对象,需要耗费大量时间在一些资源型操作上,这个时候,我们就可以先创建出一个模板,然后每次创建的时候直接从模板复制即可,不用反复进行耗时的资源型操作。

python代码:

python 复制代码
import copy

class ComplexObject:
    def __init__(self, data):
        # 资源型操作 
        self.data = data
    
    def clone(self):
        # 复制
        return copy.deepcopy(self)

# 创建原型对象
obj1 = ComplexObject(data = "large data")
# 创建新对象,直接拷贝原对象
new_object = original_object.clone()

JAVA代码:

java 复制代码
// 1. 定义抽象原型类
public abstract class Prototype  implements Coneable {
    public abstract Prototype clone();
}
// 2. 定义具体原型类
public class ConcretePrototype extends Prototype {
    private String data;

    public ConcretePrototype(String data) {
        this.data = data;
    }

    @Override
    public Prototype clone() {
        return new ConcretePrototype(this.data);
    }

    public String getData() {
        return data;
    }
}

// 3. 客户端代码
public class Client {
    public static void main(String[] args) {
        // 创建原型对象
        Prototype original = new ConcretePrototype("原始对象");

        // 克隆原型对象
        Prototype clone = original.clone();

        // 输出克隆对象的数据
        System.out.println("Clone Data: " + ((ConcretePrototype) clone).getData());
    }
}

【设计模式专题之原型模式】5. 矩形原型

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;

// 抽象原型类
class Prototype {
public:
    virtual Prototype* clone() const = 0;
    virtual string getDetails() const = 0;
    virtual ~Prototype() {}
};

// 具体矩形原型类
class RectanglePrototype : public Prototype {
private:
    string color;
    int width;
    int height;
public:
    // 构造方法
    RectanglePrototype(const string& color, int width, int height) : color(color), width(width), height(height) {}

    // 克隆方法
    Prototype* clone() const override {
        return new RectanglePrototype(*this);
    }

    string getDetails() const override {
        return "Color: " + color + ", Width: " + to_string(width) + ", Height: " + to_string(height);
    }
};

// 客户端 
int main() {
    vector<Prototype*> rectangles;

    // 读取需要创建的矩形数量
    int N;
    cin >> N;

    // 地区每个矩形的属性星系并创建矩形对象
    for (int i = 0; i < N; ++i) {
        string color;
        int width, height;

        cin >> color >> width >> height;

        // 创建原型对象
        Prototype* originalRectangle = new RectanglePrototype(color, width, height);

        // 将原型对象保存到向量中
        rectangles.push_back(originalRectangle);
    }

    // 克隆对象
    for (const auto& rectangle : rectangles) {
        Prototype* cloneRectangle = rectangle->clone();
        cout << cloneRectangle->getDetails() << endl;

        // 释放克隆对象的内存
        delete cloneRectangle;
    }

    // 释放原型对象的内存
    for (const auto& rectangle : rectangles) {
        delete rectangle;
    }

    return 0;
}
相关推荐
evans在进步13 小时前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
字节跳动开源19 小时前
VisActor全新图可视化开源项目:VGraph
前端·设计模式·开源
码匠许师傅20 小时前
【设计模式精讲】11.桥接模式(Bridge)
c++·设计模式·桥接模式·uml
学习星球2 天前
AI Agent 成本工程实战:从 OpenAI Codex 的 8 个“烧 Token“Bug 学起
人工智能·设计模式·微信小程序
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
码匠许师傅3 天前
【设计模式精讲】7.建造者模式(Builder)
设计模式·建造者模式
码匠许师傅3 天前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式
workflower3 天前
人形机器人灵巧手产业链
人工智能·设计模式·机器人·云计算·无人机
Java后端的Ai之路4 天前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
AI人工智能+电脑小能手4 天前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc