原型模式,简化多次创建相同的内容

原型模式的定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
UML图:


C++代码:

// filename: prototype.h
// author: Qinglong.mark.He
#include <iostream>
#include < string >

class  Prototype
{
protected :
    std:: string  name;
public :
    Prototype(){}
     virtual  ~Prototype(){}
    
     virtual  Prototype *clone(){ return  nullptr;}
     virtual   void   set ( char  *n){}
     virtual   void  show(){}
};

class  PrototypeA:  public  Prototype
{
public :
    PrototypeA(){
        name = "PrototypeA";
    }
    
    PrototypeA( const  PrototypeA &r){
        name = r.name;
    }
    ~PrototypeA(){
    }
    PrototypeA *clone(){
         return   new  PrototypeA(* this );
    }
     void  show(){
        std::cout<<"PrototypeA name: "<<name<<std::endl;
    }
};

yiyuan.120ask.com/news/7444/9676967.html

yiyuan.120ask.com/news/7444/9676965.html

yiyuan.120ask.com/news/7444/9676963.html

yiyuan.120ask.com/news/7444/9676979.html

yiyuan.120ask.com/news/7444/9676957.html

yiyuan.120ask.com/news/7444/9676954.html

yiyuan.120ask.com/news/7444/9676994.html

yiyuan.120ask.com/news/7444/9676990.html

yiyuan.120ask.com/news/7444/9676984.html

yiyuan.120ask.com/news/7444/9676944.html

yiyuan.120ask.com/news/7444/9676941.html

yiyuan.120ask.com/news/7444/9676939.html

yiyuan.120ask.com/news/7444/9676936.html

yiyuan.120ask.com/news/7444/9676934.html

yiyuan.120ask.com/news/7444/9676931.html

yiyuan.120ask.com/news/7444/9676927.html

yiyuan.120ask.com/news/7444/9676926.html

yiyuan.120ask.com/news/7444/9676924.html

yiyuan.120ask.com/news/7444/9676921.html

yiyuan.120ask.com/news/7444/9676919.html


class  PrototypeB:  public  Prototype
{
public :
    PrototypeB(){
        name = "PrototypeB";
    }
    
    PrototypeB( const  PrototypeB &r){
        name = r.name;
    }
    ~PrototypeB(){
    }
    PrototypeB *clone(){
         return   new  PrototypeB(* this );
    }
     void  show(){
        std::cout<<"PrototypeB name: "<<name<<std::endl;
    }
};


测试用例:

#include "prototype.h"

int  main(){
    auto r1 =  new  PrototypeA;
    auto r2 =  new  PrototypeB;
    auto r3 = r1->clone();
    auto r4 = r2->clone();

    r1->show();
    r2->show();
    delete r1;
    delete r2;

www.aibang.com/article/444091677-443192907/product/11926341.html

www.aibang.com/show/444091677-443192907/product/11926343.html

www.aibang.com/show/444091677-443192907/product/11926345.html

www.aibang.com/show/444091677-443192907/product/11926347.html

www.aibang.com/show/444091677-443192907/product/11926349.html

www.aibang.com/article/444091677-443192907/product/11545941.html

www.aibang.com/show/444091677-443192907/product/11547029.html

www.aibang.com/show/444091677-443192907/product/11926355.html

www.aibang.com/show/444091677-443192907/product/11926357.html

www.aibang.com/show/444091677-443192907/product/11926359.html

www.aibang.com/show/444091677-443192907/product/11926377.html

www.aibang.com/show/444091677-443192907/product/10481603.html

www.aibang.com/show/444091677-443192907/product/11926385.html

www.aibang.com/show/444091677-443192907/product/11926389.html

www.aibang.com/show/444091677-443192907/product/11926395.html

www.aibang.com/show/444091677-443192907/product/11926399.html

www.aibang.com/article/444091677-443192907/product/11926401.html

www.aibang.com/show/444091677-443192907/product/11588729.html

www.aibang.com/show/444091677-443192907/product/11926409.html

www.aibang.com/show/444091677-443192907/product/10532459.html

www.aibang.com/show/444091677-443192907/product/11926423.html

www.aibang.com/show/444091677-443192907/product/11926429.html

www.aibang.com/show/444091677-443192907/product/11926431.html

www.aibang.com/show/444091677-443192907/product/11926437.html

www.aibang.com/show/444091677-443192907/product/11926439.html

www.aibang.com/show/444091677-443192907/product/11926445.html

www.aibang.com/show/444091677-443192907/product/11926449.html

www.aibang.com/show/444091677-443192907/product/11926457.html

www.aibang.com/show/444091677-443192907/product/11926463.html

www.aibang.com/show/444091677-443192907/product/11926467.html


    r3->show();
    r4->show();
    delete r3;
    delete r4;
    
     return  0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值