设计模式六

软件设计                  石家庄铁道大学信息学院

 

实验6:原型模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解原型模式的动机,掌握该模式的结构;

2、能够利用原型模式解决实际问题

 

[实验任务一]:向量的原型

C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。

实验要求:

1. 画出对应的类图;

 

 

2. 提交源代码(用C++完成);

#include <iostream>

 

class Vector {

private:

    int* data; // 指向向量数据的指针

    int size; // 向量的长度

 

public:

    // 构造函数

    Vector(int size) {

        this->size = size;

        data = new int[size];

    }

 

    // 析构函数

    ~Vector() {

        delete[] data;

    }

 

    // 获取向量长度

    int getSize() {

        return size;

    }

 

    // 获取指定位置的元素

    int getElement(int index) {

        return data[index];

    }

 

    // 设置指定位置的元素

    void setElement(int index, int value) {

        data[index] = value;

    }

 

    // 浅克隆

    Vector shallowClone() {

        Vector clone(size);

        clone.data = data;

        return clone;

    }

 

    // 深克隆

    Vector deepClone() {

        Vector clone(size);

        for (int i = 0; i < size; i++) {

            clone.data[i] = data[i];

        }

        return clone;

    }

};

 

int main() {

    // 创建一个长度为5的向量

    Vector v(5);

 

    // 设置向量元素的值

    for (int i = 0; i < v.getSize(); i++) {

        v.setElement(i, i + 1);

    }

 

    // 浅克隆

    Vector shallowCopy = v.shallowClone();

 

    // 修改原始向量的第一个元素

    v.setElement(0, 10);

 

    // 输出浅克隆后的向量

    std::cout << "浅克隆: ";

    for (int i = 0; i < shallowCopy.getSize(); i++) {

        std::cout << shallowCopy.getElement(i) << " ";

    }

    std::cout << std::endl;

 

    // 深克隆

    Vector deepCopy = v.deepClone();

 

    // 修改原始向量的第一个元素

    v.setElement(0, 20);

 

    // 输出深克隆后的向量

    std::cout << "深克隆: ";

    for (int i = 0; i < deepCopy.getSize(); i++) {

        std::cout << deepCopy.getElement(i) << " ";

    }

    std::cout << std::endl;

 

    return 0;

}

 

深浅克隆的异同

异同点: 1. 相同点:浅克隆和深克隆都是用来复制对象的方式,可以创建一个新的对象并将原始对象的值复制给新对象。 2. 相同点:它们都可以用于向量类的复制,以实现对向量的克隆。

异点: 1. 复制方式:浅克隆只复制对象的引用或指针,而不会复制对象本身的内容。这意味着原始对象和克隆对象将引用相同的内存地址。深克隆则会创建一个全新的对象,并将原始对象的内容逐个复制到新对象中,使得原始对象和克隆对象完全独立。 2. 数据独立性:由于浅克隆只是复制引用,所以原始对象和克隆对象共享相同的数据。这意味着对原始对象的修改也会影响到克隆对象。而深克隆创建了一个独立的对象,使得对原始对象的修改不会影响到克隆对象。 3. 内存管理:浅克隆不需要额外的内存管理,因为它只是复制了指针。而深克隆需要额外的内存来存储复制后的对象内容,并且需要手动管理内存的释放。

 

 

3.注意编程规范。

posted @ 2023-11-02 08:32  橘子味芬达水  阅读(26)  评论(0编辑  收藏  举报