首页 > 社交 > 科普中国

设计模式之原型模式

常驻编辑 科普中国 2022-05-23 原型   模式   示例   原版   数据类型   试卷   接口   对象   状态   过程

介绍:Yqa拜客生活常识网

原型模式是一种创建型设计模式,使你可以通过复制原型来创建一个一模一样的新的对象,无需考虑创建过程,数据类型等内容;Yqa拜客生活常识网


作用:Yqa拜客生活常识网

创建一个与原型一模一样的对象;Yqa拜客生活常识网


解决问题:Yqa拜客生活常识网

  • 即使原型的状态有所改变,也可以创建出与其当前状态一致的对象
  • 省去了创建对象的复杂操作,不必关注创建对象的具体过程

类比:Yqa拜客生活常识网

老师打印试卷,拿着原版试卷,可以复制出任意数量的试卷,原版试卷即为原型;Yqa拜客生活常识网


代码示例:Yqa拜客生活常识网

#include 
#include 
#include 

#define VAR(name, id)   name##id

typedef struct Paper
{
    char* teacher_name;
    int class;
    char* question;
    struct Paper* (*copy)(struct Paper* pPaper);
} paper_t;


/*原型的复制接口*/
paper_t* paper_copy(paper_t* pPaper)
{
    paper_t* copy = (paper_t*)malloc(sizeof(paper_t));
    memcpy(copy, pPaper, sizeof(paper_t));
    return copy;
}


paper_t* clone(paper_t* pPaper)
{
    return pPaper->copy(pPaper);
}

void main(void)
{
    /*定义原型*/
    paper_t origin_paper = {"Li", 5, "1 + 1 = ?", paper_copy};
    
    /*复制10份试卷*/
    for(int i = 1; i <= 10; i++)
    {
        paper_t* VAR(paper, i) = clone(&origin_paper);
        printf("paper_%d => name: %s, class: %d, question: %sr
",
                i, VAR(paper, i)->teacher_name, VAR(paper, i)->class, VAR(paper, i)->question);
    }
}

输出:Yqa拜客生活常识网

paper_1 => name: Li, class: 5, question: 1 + 1 = ?
paper_2 => name: Li, class: 5, question: 1 + 1 = ?
paper_3 => name: Li, class: 5, question: 1 + 1 = ?
paper_4 => name: Li, class: 5, question: 1 + 1 = ?
paper_5 => name: Li, class: 5, question: 1 + 1 = ?
paper_6 => name: Li, class: 5, question: 1 + 1 = ?
paper_7 => name: Li, class: 5, question: 1 + 1 = ?
paper_8 => name: Li, class: 5, question: 1 + 1 = ?
paper_9 => name: Li, class: 5, question: 1 + 1 = ?
paper_10 => name: Li, class: 5, question: 1 + 1 = ?

相关阅读:

  • 《突围》和《人民的名义》有什么关系?林满江的原型是谁
  • 马天目的原型是谁?裴如海为什么没杀马天目?
  • 《突围》中福企业有原型吗?靳东为什么成为是董事长?
  • 《功勋》申纪兰原型人物是谁?结局是什么?
  • 《功勋》孙家栋魏素萍一见钟情第几集?有原型吗?
  • 《功勋》燕妮度过危险期了吗?剧中原型还有几个在世?
  • 电视剧《突围》齐本安原型有吗?齐本安师父是干什么的?
  • 谭胖公原型是谁?结局如何?
  • 《嘉南传》皇帝的历史原型是谁?李谦的真实身份是什么?
  • 《功勋》大兰子和张海良的结局是什么?廖飞有历史原型吗
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。