C++创建型设计模式之 原型模式

本文介绍了C++创建型设计模式中的原型模式,详细阐述了如何在对象拷贝时处理指针和引用,包括直接拷贝方法、深拷贝方法、克隆方法以及序列化方法。此外,还探讨了原型模式在处理复杂类型和多级继承时的挑战及解决方案。
摘要由CSDN通过智能技术生成

C++创建型设计模式之 原型模式

原型模式简介

对于较复杂的类型,我们在构造一个对象时当然可以用前面讲到的构造器模式或工厂模式来作为获取的方法,但在我们已知一个对象A和另一个对象B只有很小一部分的属性不同时,我们肯定会希望给A对象拷贝一份作为B,再将B对象相应的属性设置正确就行了。比如一对双胞胚姐妹,只有名字不同,在填完姐姐信息后,复制一份后再将名字修改成妹妹的便大功告成。
根据原型模式的目的,关键的任务就是拷贝,但方法可不只有重写虚接口 clone() 一种。

直接拷贝方法

对于成员变量中不含引用,指针,智能指针等变量时,我们直接拷贝便可以。但在对象拷贝时,难点就是存在指针的情况。当然对于一级指针,指针所指的原对象中不再含有指针情况时,我们使用拷贝构造或重载等号的方法,都可以实现对象的深拷贝。
例如,我们需要对溜狗的人群作个研究,我们将狗主人设为成员变量,将狗设为指针,通过属性设置接口完成对应属性设置:

#include <iostream>
enum class Sex
{
   
    man = 0,
    woman
};
struct Dog
{
   
    std::string name;
    std::string weight;
    std::string color;
};
struct Master
{
   
    std::string name;
    int age;
    Sex sex = Sex::man;
};
class WalkDog
{
   
    Master _master;
    Dog* _dog = nullptr;
public:
    WalkDog() = default;
    void setMaster(Master master)
    {
   
        _master = master;
    }
    void setDog(Dog dog)
    {
   
        if (_dog) *_dog = dog;
        else {
   
            _dog = new Dog{
   dog};
        }
    }
    Master getMaster() const {
    return _master; }
    Dog* getDog() const {
    return _dog; }
    WalkDog(Master master, Dog dog)
    {
   
        _master = master;
        *_dog = dog;
    }
    void print
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值