• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 183,  comments - 10,  trackbacks - 0
            來(lái)自于《大話設(shè)計(jì)模式》
            原型模式(Prototype):用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。

            這個(gè)設(shè)計(jì)模式在 C++ 中如何實(shí)現(xiàn)?

            UML 圖:

            代碼實(shí)現(xiàn) C++:
              1 #include <iostream>
              2 using namespace std;
              3 
              4 class Prototype
              5 {
              6 public:
              7     virtual Prototype& Clone() = 0;
              8 };
              9 
             10 class ConcretePrototype
             11 {
             12 private:
             13     int m;
             14     char* str;
             15 public:
             16     ConcretePrototype(int n = 0const char* s = "") : m(n)
             17     {
             18         str = new char[strlen(s) + 1];
             19         if (str == 0)
             20         {
             21             exit(1);
             22         }
             23         strcpy(str, s);
             24     }
             25     ConcretePrototype(const ConcretePrototype& p)
             26     {
             27         str = new char[strlen(p.str) + 1];
             28         if (str == 0)
             29         {
             30             exit(1);
             31         }
             32         strcpy(str, p.str);
             33         m = p.m;
             34     }
             35     ConcretePrototype& operator =(const ConcretePrototype& p)
             36     {
             37         if (this == &p)
             38         {
             39             delete [] str;
             40             str = new char[strlen(p.str) + 1];
             41             if (str == 0)
             42             {
             43                 exit(1);
             44             }
             45             strcpy(str, p.str);
             46             m = p.m;
             47         }
             48         return *this;
             49     }
             50     ~ConcretePrototype()
             51     {
             52         delete [] str;
             53     }
             54     ConcretePrototype& Clone()
             55     {
             56         return *this;
             57     }
             58     void SetStr(const char* s = "")
             59     {
             60         delete [] str;
             61         str = new char[strlen(s) + 1];
             62         if (str == 0)
             63         {
             64             exit(1);
             65         }
             66         strcpy(str, s);
             67     }
             68     void SetM(int n)
             69     {
             70         m = n;
             71     }
             72     void SetStrAndM(const char* s, int n)
             73     {
             74         delete [] str;
             75         str = new char[strlen(s) + 1];
             76         if (str == 0)
             77         {
             78             exit(1);
             79         }
             80         strcpy(str, s);
             81         m = n;
             82     }
             83     void test()
             84     {
             85         cout << m << endl;
             86         cout << str << endl;
             87     }
             88 };
             89 
             90 int main()
             91 {
             92     ConcretePrototype c(5"abc");
             93     c.test();
             94 
             95     ConcretePrototype c2 = static_cast<ConcretePrototype>(c.Clone());
             96     c2.test();
             97 
             98     c2.SetStrAndM("xyz"7);
             99     c2.test();
            100 
            101     return 0;
            102 
            103 }

            posted on 2011-04-25 16:03 unixfy 閱讀(303) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            亚洲精品NV久久久久久久久久| 亚洲人成无码www久久久| 亚洲综合伊人久久大杳蕉| 久久久久亚洲AV片无码下载蜜桃| 欧美丰满熟妇BBB久久久| 久久婷婷久久一区二区三区| 久久一区二区三区99| 人妻精品久久无码专区精东影业| 久久综合综合久久狠狠狠97色88| 精品久久久久久久久免费影院| 人妻精品久久久久中文字幕69| 成人午夜精品久久久久久久小说| 久久久噜噜噜久久中文字幕色伊伊| 精品综合久久久久久97超人| 久久久久亚洲AV片无码下载蜜桃| 91亚洲国产成人久久精品网址| 久久精品aⅴ无码中文字字幕不卡| 2020最新久久久视精品爱 | 久久久久黑人强伦姧人妻| 亚洲AV成人无码久久精品老人| 99久久精品国产综合一区| 久久精品天天中文字幕人妻 | 欧洲精品久久久av无码电影| 青青青国产精品国产精品久久久久| 国产精品久久久久久久app| 精品国产综合区久久久久久| 精品久久久久久亚洲精品 | 久久国产色AV免费观看| 日产精品久久久久久久| 无码国内精品久久人妻麻豆按摩| 99国内精品久久久久久久| 狠狠色丁香久久综合五月| 久久精品国产亚洲AV无码娇色| 思思久久精品在热线热| 欧美日韩精品久久久免费观看| 一本大道久久香蕉成人网| 午夜精品久久久久久影视777| 久久精品综合一区二区三区| 国产精品成人99久久久久91gav | 久久久久免费精品国产| 成人精品一区二区久久久|