青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

0 引言

0.1 目的

       本文檔給出設(shè)計(jì)模式之——Factory模式的簡(jiǎn)化詮釋,并給出其C++實(shí)現(xiàn)。

0.2 說(shuō)明

Project

Design Pattern Explanation(By K_Eckel)

Authorization

Free Distributed but Ownership Reserved

Date

Test Bed

MS Visual C++ 6.0

0.3 參考

       在本文檔的寫作中,參考了以下的資源,在此列出表示感謝:

u       書籍

[GoF 2000]:GoF,Design Patterns-Elements of Reusable Object-Oriented Software Addison-Wesley 2000/9.

        [Martine 2003]:Robert C.Martine, Agile Software Development Principles, Patterns, and Practices, Pearson Education, 2003.

u       網(wǎng)頁(yè)

0.4 聯(lián)系作者

Author

K_Eckel

State

Candidate for Master’s Degree School of

E_mail

frwei@whu.edu.cn  

 

2 Factory模式

2.1 問題

       在面向?qū)ο笙到y(tǒng)設(shè)計(jì)中經(jīng)常可以遇到以下的兩類問題:

       1)為了提高內(nèi)聚(Cohesion)和松耦合(Coupling),我們經(jīng)常會(huì)抽象出一些類的公共接口以形成抽象基類或者接口。這樣我們可以通過聲明一個(gè)指向基類的指針來(lái)指向?qū)嶋H的子類實(shí)現(xiàn),達(dá)到了多態(tài)的目的。這里很容易出現(xiàn)的一個(gè)問題n多的子類繼承自抽象基類,我們不得不在每次要用到子類的地方就編寫諸如new ×××;的代碼。這里帶來(lái)兩個(gè)問題1)客戶程序員必須知道實(shí)際子類的名稱(當(dāng)系統(tǒng)復(fù)雜后,命名將是一個(gè)很不好處理的問題,為了處理可能的名字沖突,有的命名可能并不是具有很好的可讀性和可記憶性,就姑且不論不同程序員千奇百怪的個(gè)人偏好了。),2)程序的擴(kuò)展性和維護(hù)變得越來(lái)越困難。

       2)還有一種情況就是在父類中并不知道具體要實(shí)例化哪一個(gè)具體的子類。這里的意思為:假設(shè)我們?cè)陬怉中要使用到類B,B是一個(gè)抽象父類,在A中并不知道具體要實(shí)例化那一個(gè)B的子類,但是在類A的子類D中是可以知道的。在A中我們沒有辦法直接使用類似于new ×××的語(yǔ)句,因?yàn)楦揪筒恢?#215;××是什么。

       以上兩個(gè)問題也就引出了Factory模式的兩個(gè)最重要的功能:

       1)定義創(chuàng)建對(duì)象的接口,封裝了對(duì)象的創(chuàng)建;

       2)使得具體化類的工作延遲到了子類中。

2.2 模式選擇

       我們通常使用Factory模式來(lái)解決上面給出的兩個(gè)問題。在第一個(gè)問題中,我們經(jīng)常就是聲明一個(gè)創(chuàng)建對(duì)象的接口,并封裝了對(duì)象的創(chuàng)建過程。Factory這里類似于一個(gè)真正意義上的工廠(生產(chǎn)對(duì)象)。在第二個(gè)問題中,我們需要提供一個(gè)對(duì)象創(chuàng)建對(duì)象的接口,并在子類中提供其具體實(shí)現(xiàn)(因?yàn)橹挥性谧宇愔锌梢詻Q定到底實(shí)例化哪一個(gè)類)。第一中情況的Factory的結(jié)構(gòu)示意圖為:


1Factory模式結(jié)構(gòu)示意圖1

       1所以的Factory模式經(jīng)常在系統(tǒng)開發(fā)中用到,但是這并不是Factory模式的最大威力所在(因?yàn)檫@可以通過其他方式解決這個(gè)問題)。Factory模式不單是提供了創(chuàng)建對(duì)象的接口,其最重要的是延遲了子類的實(shí)例化(第二個(gè)問題),以下是這種情況的一個(gè)Factory的結(jié)構(gòu)示意圖:


2Factory模式結(jié)構(gòu)示意圖1

       2中關(guān)鍵中Factory模式的應(yīng)用并不是只是為了封裝對(duì)象的創(chuàng)建,而是要把對(duì)象的創(chuàng)建放到子類中實(shí)現(xiàn):Factory中只是提供了對(duì)象創(chuàng)建的接口,其實(shí)現(xiàn)將放在Factory的子類ConcreteFactory中進(jìn)行。這是圖2和圖1的區(qū)別所在。

2.3 實(shí)現(xiàn)

 代碼片斷1:Product.h
//Product.h

#ifndef _PRODUCT_H_
#define _PRODUCT_H_

class Product
{
public:
virtual ~Product() =0;

protected:
Product();

private:

};

class ConcreteProduct:publicProduct
{
public:
~ConcreteProduct();

ConcreteProduct();

protected:

private:

};

#endif //~_PRODUCT_H_

代碼片斷2:Product.cpp
//Product.cpp

#include "Product.h"

#include<iostream>
using namespace std;

Product::Product()
{

}

Product::~Product()
{

}

ConcreteProduct::ConcreteProduct()
{
cout<<"ConcreteProduct...."<<endl;
}

ConcreteProduct::~ConcreteProduct()
{

}

代碼片斷3:Factory.h
//Factory.h

#ifndef _FACTORY_H_
#define _FACTORY_H_

class Product;

class Factory
{
public:
 virtual ~Factory() = 0;

 virtual Product* CreateProduct() = 0;

protected:
 Factory();

private:

};

class ConcreteFactory:public Factory
{
public:

 ~ConcreteFactory();

 ConcreteFactory();

 Product* CreateProduct();

protected:

private:

};

#endif //~_FACTORY_H_

代碼片斷4:Factory.cpp
//Factory.cpp

#include "Factory.h"
#include "Product.h"

#include <iostream>
using namespace std;

Factory::Factory()
{

}

Factory::~Factory()
{

}

ConcreteFactory::ConcreteFactory()
{
 cout<<"ConcreteFactory....."<<endl;
}

ConcreteFactory::~ConcreteFactory()
{

}

Product* ConcreteFactory::CreateProduct()
{
 return new ConcreteProduct();
}

代碼片斷5:main.cpp
//main.cpp

#include "Factory.h"
#include "Product.h"

#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
 Factory* fac = new ConcreteFactory();

 Product* p = fac->CreateProduct();

 return 0;
}


2.4 討論

     Factory 模式在實(shí)際開發(fā)中應(yīng)用非常廣泛,面向?qū)ο蟮南到y(tǒng)經(jīng)常面臨著對(duì)象創(chuàng)建問題:要?jiǎng)?chuàng)建的類實(shí)在是太多了。而Factory提供的創(chuàng)建對(duì)象的接口封裝(第一個(gè)功 能),以及其將類的實(shí)例化推遲到子類(第二個(gè)功能)都部分地解決了實(shí)際問題。一個(gè)簡(jiǎn)單的例子就是筆者開開發(fā)Visual CMCS系統(tǒng)的語(yǔ)義分析過程中,由于要為文法中的每個(gè)非終結(jié)符構(gòu)造一個(gè)類處理,因此這個(gè)過程中對(duì)象的創(chuàng)建非常多,采用Factory模式后系統(tǒng)可讀性性和 維護(hù)都變得elegant許多。
     Factory模式也帶來(lái)至少以下兩個(gè)問題:
     1)如果為每一個(gè)具體的ConcreteProduct類的實(shí)例化提供一個(gè)函數(shù)體,那么我們可能不得不在系統(tǒng)中添加了一個(gè)方法來(lái)處理這個(gè)新建的 ConcreteProduct,這樣Factory的接口永遠(yuǎn)就不肯能封閉(Close)。當(dāng)然我們可以通過創(chuàng)建一個(gè)Factory的子類來(lái)通過多態(tài)實(shí) 現(xiàn)這一點(diǎn),但是這也是以新建一個(gè)類作為代價(jià)的。
     2)在實(shí)現(xiàn)中我們可以通過參數(shù)化工廠方法,即給FactoryMethod()傳遞一個(gè)參數(shù)用以決定是創(chuàng)建具體哪一個(gè)具體的Product(實(shí)際上筆者在 Visual CMCS中也正是這樣做的)。當(dāng)然也可以通過模板化避免1)中的子類創(chuàng)建子類,其方法就是將具體Product類作為模板參數(shù),實(shí)現(xiàn)起來(lái)也很簡(jiǎn)單。
     可以看出,F(xiàn)actory模式對(duì)于對(duì)象的創(chuàng)建給予開發(fā)人員提供了很好的實(shí)現(xiàn)策略,但是Factory模式僅僅局限于一類類(就是說(shuō)Product是一類, 有一個(gè)共同的基類),如果我們要為不同類的類提供一個(gè)對(duì)象創(chuàng)建的接口,那就要用Abstract Factory了。



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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美午夜国产| 亚洲一区欧美激情| 在线视频中文亚洲| 亚洲精品中文在线| 99精品国产一区二区青青牛奶| 精品av久久707| 在线看视频不卡| 亚洲国产成人久久综合一区| 1024成人| 夜夜嗨av一区二区三区中文字幕| 亚洲人体1000| 中文欧美日韩| 欧美主播一区二区三区美女 久久精品人 | 欧美高清视频在线播放| 欧美国产一区二区三区激情无套| 欧美高清在线一区二区| 欧美视频一区二区在线观看| 国产精品视频区| ●精品国产综合乱码久久久久| 亚洲区一区二| 亚洲免费在线观看视频| 久久先锋资源| 亚洲精品久久久久久久久久久| 91久久久久久国产精品| 亚洲国产精品久久久久| 国产一区二区三区无遮挡| 国模 一区 二区 三区| 亚洲欧洲精品成人久久奇米网 | 永久久久久久| 99re6这里只有精品视频在线观看| 99精品国产在热久久婷婷| 欧美亚洲一级| 亚洲美女一区| 欧美国产激情| 亚洲国产成人高清精品| 亚洲一区日韩| 亚洲激情视频在线播放| 久久精品盗摄| 国产日韩欧美不卡| 亚洲综合色噜噜狠狠| 欧美国产日韩精品| 久久精品国产精品亚洲综合 | 亚洲一区二区三区激情| 欧美巨乳波霸| 一本色道久久| 午夜欧美大片免费观看| 亚洲激情第一区| 久久久精品国产99久久精品芒果| 99国内精品久久| 久久大逼视频| 久久久久久久综合日本| 狠狠噜噜久久| 欧美电影免费| 欧美视频不卡中文| 久久精品亚洲乱码伦伦中文| 久久精品一区蜜桃臀影院| 亚洲丶国产丶欧美一区二区三区| 欧美大胆a视频| 国产精品国产| 久久亚洲私人国产精品va| 久久综合给合| 欧美一进一出视频| 久久久久久成人| 9久草视频在线视频精品| 一区二区三区日韩在线观看| 国产一区二区三区不卡在线观看| 麻豆av一区二区三区| 欧美日韩在线播放一区| 久久久一区二区三区| 欧美日本在线| 玖玖国产精品视频| 国产日产欧美a一级在线| 亚洲大胆美女视频| 国产自产高清不卡| 亚洲日本中文字幕| 欧美精品videossex性护士| 久久精品国产综合精品| 欧美日韩国产一区| 亚洲第一色在线| 国产美女诱惑一区二区| 亚洲日本无吗高清不卡| 最新高清无码专区| 久久精品视频在线播放| 久久成人人人人精品欧| 国内精品**久久毛片app| 一区二区三区成人| 欧美人与性禽动交情品| 亚洲欧洲日本在线| 99re8这里有精品热视频免费| 久久一区精品| 一道本一区二区| 久久国产精品高清| 亚洲高清资源综合久久精品| 免费观看成人www动漫视频| 亚洲国产精品久久久久婷婷884 | 久久人人爽人人| 影音先锋亚洲电影| 欧美国产日韩免费| 中文亚洲免费| 欧美国产日韩一二三区| 亚洲欧美高清| 在线观看亚洲一区| 国产精品欧美激情| 欧美a级理论片| 久久国产日韩欧美| 一区二区三区日韩欧美| 亚洲电影欧美电影有声小说| 午夜宅男欧美| 亚洲手机视频| 国产精品99久久久久久www| 国模私拍视频一区| 国产色视频一区| 国产精品一区二区久久精品| 欧美日韩国产高清| 欧美大尺度在线观看| 久久久久在线| 欧美专区在线播放| 午夜精品久久| 欧美一区国产一区| 亚洲免费视频一区二区| 91久久精品网| 99视频国产精品免费观看| 亚洲另类自拍| 亚洲一区日韩在线| 久久本道综合色狠狠五月| 久久超碰97人人做人人爱| 欧美中文在线免费| 欧美高清在线一区二区| 亚洲二区视频在线| 99精品免费视频| 欧美在线影院| 欧美激情一区二区三区蜜桃视频| 欧美jizzhd精品欧美喷水| 欧美剧在线免费观看网站| 国产精品久久夜| 精品不卡一区| 亚洲视频精选在线| 久热re这里精品视频在线6| 亚洲国产福利在线| 中文日韩在线| 欧美激情精品久久久久久黑人 | 91久久久久久久久久久久久| 日韩午夜在线视频| 久久久夜精品| 国产欧美一区二区三区国产幕精品| 激情av一区二区| 久久久久久亚洲精品不卡4k岛国| 亚洲高清av| 性xx色xx综合久久久xx| 免费看的黄色欧美网站| 亚洲美女免费视频| 噜噜噜91成人网| 国产一区二区福利| 午夜久久电影网| 一区二区三区精品视频| 欧美激情91| 亚洲激情网址| 欧美激情一区二区三区四区| 久久久999| 亚洲国产成人久久综合一区| 美女国产一区| 久久九九久精品国产免费直播| 免费在线亚洲欧美| 欧美另类在线观看| 国产日韩一区二区三区在线| 亚洲欧美成人精品| 性色一区二区| 亚洲国产高清在线| 亚洲精品欧美极品| 欧美天堂亚洲电影院在线播放 | 午夜精品亚洲| 精品成人乱色一区二区| 亚洲东热激情| 欧美四级伦理在线| 久久久久久网| 欧美日本一区二区三区 | 国产一区二区三区高清在线观看 | 久久久久久夜| 美女精品国产| 久久精品亚洲热| 欧美日韩日本网| 免费成人高清| 国产欧美一区二区三区另类精品 | 国产在线不卡视频| 夜夜嗨av一区二区三区免费区| 国产视频一区在线观看一区免费| 欧美电影在线观看| 国产亚洲精品v| 亚洲一区二区三区高清 | 国产亚洲成精品久久| 欧美激情一区二区在线| 国产主播一区二区| 午夜亚洲一区| 久久精品一区二区三区中文字幕| 欧美精品一区二区在线播放| 久色婷婷小香蕉久久| 国产一区清纯| 亚洲免费人成在线视频观看| 欧美大胆成人| 99精品99久久久久久宅男|