工廠模式和原型模式

1、工廠模式

創(chuàng)新互聯(lián):于2013年成立為各行業(yè)開(kāi)拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為上1000家公司企業(yè)提供了專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站推廣服務(wù), 按需網(wǎng)站開(kāi)發(fā)由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺(jué)效果,策劃師分析客戶的同行競(jìng)爭(zhēng)對(duì)手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

  面向抽象類編程,底下可以接N多個(gè)生產(chǎn)某種的具體工廠;

  簡(jiǎn)單工廠模式:專門定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其它類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類;


2、具體實(shí)現(xiàn)

  (1)、代碼如下

#include<iostream>
using namespace std;

class Fruit{
    public:
        virtual void sayname() = 0;
    private:

};

class Banana : public Fruit{
    public:
        void sayname(){
            cout<<"我是香蕉"<<endl;
        }   
    private:
};

class Apple : public Fruit{
    public:
        void sayname(){
            cout<<"我是蘋果"<<endl;
        }   
    private:
};
class AbFactory{
    public:
        virtual Fruit *CreateProduct() = 0;
    private:

};

class BananaFactory : public AbFactory{
    public:
        virtual Fruit *CreateProduct(){
            return new Banana;
        }

    private:
};

class AppleFactory : public AbFactory{
    public:
        virtual Fruit *CreateProduct(){
            return new Apple;
        }

    private:
};
//添加新的產(chǎn)品
class Pear : public Fruit{
    public:
        void sayname(){
            cout<<"我是 pear"<<endl;
        }
    private:
};

class PearFactory : public AbFactory{
    public:
        Fruit *CreateProduct(){
            return new Pear;
        }
    private:
};


int main(void){
    AbFactory *factory = NULL;
    Fruit *fruit = NULL;
    //吃香蕉
    factory = new BananaFactory;
    fruit = factory->CreateProduct();
    fruit->sayname();

    //吃梨
    factory = new PearFactory;
    fruit = factory->CreateProduct();
    fruit->sayname();
    delete factory;

    return 0;
}

  (2)、運(yùn)行結(jié)果

工廠模式和原型模式

 (3)、工廠模式

  擴(kuò)展性不好;

3、原型模式

  提供一個(gè)clone()接口,讓普通對(duì)象擁有自我復(fù)制的功能!

 相當(dāng)于拷貝構(gòu)造函數(shù)的編寫;(當(dāng)有成員為指針時(shí))這個(gè)牽扯深拷貝和淺拷貝的問(wèn)題;

4、具體實(shí)現(xiàn)

  (1)、代碼如下

#include<iostream>
#include<string>
using namespace std;

class Person{
    public:
        virtual Person *clone() = 0;
        virtual void printT() = 0;
    private:
};

class Cplus : public Person{
    public:
        Cplus(){
            m_name = ""; 
            m_age = 0;
        }   
        Cplus(string name, int age){
            m_name = name;
            m_age = age;
        }   
        virtual void printT(){
            cout<<"m_name:"<<m_name<<" "<<"m_age:"<<m_age<<endl;
        }   
        virtual Person *clone(){
            Cplus *tmp = new Cplus;
            *tmp = *this;

            return tmp;
        }
    private:
        string m_name;
        int m_age;
        char *p;   //此時(shí)就會(huì)牽扯深拷貝的問(wèn)題

};

int main(void){
    Cplus *c1 = new Cplus("張三", 32);
    c1->printT();

    Person *c2 = c1->clone();
    c2->printT();

    return 0;
}

 (2)、運(yùn)行結(jié)果

工廠模式和原型模式

文章標(biāo)題:工廠模式和原型模式
文章分享:http://muchs.cn/article34/jcpspe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站網(wǎng)站導(dǎo)航電子商務(wù)網(wǎng)站維護(hù)、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)