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

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>
            欧美啪啪成人vr| 久久亚洲一区二区| 亚洲欧美日本另类| 亚洲欧美日本日韩| 国产欧美日韩一区二区三区在线| 久久久国产精品一区二区三区| 欧美日韩精品伦理作品在线免费观看| 久久精品免费看| 亚洲激情图片小说视频| 欧美不卡在线视频| 亚洲深夜福利| 免费成人高清| 夜夜狂射影院欧美极品| 国产精品xnxxcom| 久久av资源网| 亚洲日本视频| 亚洲综合第一页| 精品动漫一区| 国产精品www色诱视频| 久久免费偷拍视频| 一级日韩一区在线观看| 麻豆乱码国产一区二区三区| 亚洲午夜电影网| 狠久久av成人天堂| 欧美午夜在线| 久久综合九色综合网站| 亚洲最新在线视频| 久久夜色精品国产欧美乱极品| 能在线观看的日韩av| 在线观看视频免费一区二区三区| 国产精品久久久久久久久久直播 | 久久久精品免费视频| 久久成人在线| 99精品热视频只有精品10| 国产精品综合久久久| 久久久久久久网| 亚洲人成亚洲人成在线观看图片| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 最新中文字幕一区二区三区| 日韩午夜中文字幕| 亚洲第一精品电影| 很黄很黄激情成人| 国产精品区免费视频| 欧美精品久久久久a| 久久全国免费视频| 欧美一区观看| 欧美一区二区三区精品| 亚洲一区二区三区在线视频| 亚洲毛片av在线| 亚洲精品偷拍| 亚洲国产欧美一区二区三区丁香婷| 欧美一区二区三区在线视频 | 午夜精品视频在线观看| 亚洲天堂男人| 一本色道精品久久一区二区三区 | 亚洲黄色在线看| 亚洲大片精品永久免费| 国内精品视频在线观看| 国产一区 二区 三区一级| 欧美亚洲成人精品| 欧美视频在线观看免费| 国产精品女人毛片| 国产精品一区二区在线| 国产精品乱子久久久久| 国产精品久久久久99| 国产精品国产a| 欧美在线视频观看免费网站| 国产精品久久久久久久久婷婷| 久久综合色88| 美国十次成人| 女仆av观看一区| 欧美日韩亚洲精品内裤| 国产精品va| 国产一区二区看久久| 亚洲高清视频的网址| 野花国产精品入口| 欧美在线视频不卡| 欧美成人精品1314www| 亚洲精品乱码久久久久久久久| 亚洲夫妻自拍| 亚洲视频免费在线| 久久久久国产精品一区| 欧美精品尤物在线| 国产欧美日韩一区二区三区在线观看| 欧美日韩免费精品| 国产日韩欧美在线播放不卡| 在线观看欧美日韩| 在线综合欧美| 久久男人资源视频| 最新热久久免费视频| 亚洲欧美不卡| 欧美大片在线观看一区二区| 国产精品黄色| 在线成人激情视频| 亚洲精品一区二区在线观看| 亚洲已满18点击进入久久| 久久尤物电影视频在线观看| 亚洲三级色网| 久久九九免费视频| 国产精品a级| 亚洲三级国产| 裸体歌舞表演一区二区| 亚洲神马久久| 欧美大片在线看| 黄色影院成人| 亚欧成人在线| 日韩网站在线观看| 久久久蜜桃一区二区人| 国产精品久久777777毛茸茸| 亚洲精品国产精品国自产在线| 国产精品99久久久久久宅男| 久久久久久欧美| 亚洲永久在线| 欧美日韩在线第一页| 91久久线看在观草草青青| 久久久久久97三级| 亚洲午夜精品久久久久久app| 久久久久久久久久久久久久一区| 国产精品高潮在线| 一区二区不卡在线视频 午夜欧美不卡'| 久久狠狠久久综合桃花| 国产精品99久久久久久宅男| 牛夜精品久久久久久久99黑人 | 久久久青草青青国产亚洲免观| 欧美国产日产韩国视频| 在线观看av一区| 久久久精彩视频| 欧美亚洲网站| 好吊色欧美一区二区三区四区| 亚洲一区精品在线| 亚洲图片欧洲图片av| 国产精品国产三级国产aⅴ无密码| 亚洲日韩欧美视频一区| 亚洲精品1区2区| 欧美日韩成人综合在线一区二区| 亚洲成色www久久网站| 欧美激情四色| 欧美精品九九| 亚洲自拍偷拍麻豆| 亚洲欧美精品伊人久久| 国产精品福利av| 久久精品国产免费看久久精品| 亚洲一区精品电影| 国产亚洲一二三区| 久久综合九色综合欧美就去吻 | 亚洲精品国产精品国自产在线| 久久综合伊人| 久久资源在线| 亚洲精品视频免费| 一区二区三区视频在线| 国产伦理一区| 久久午夜电影| 欧美大片免费观看| 亚洲欧洲av一区二区三区久久| 亚洲午夜久久久| 激情综合电影网| 亚洲国产精彩中文乱码av在线播放| 免费欧美电影| 欧美一区2区视频在线观看| 久久久久久综合| 一区二区三区四区蜜桃| 亚洲欧美国产精品va在线观看| 韩国精品在线观看| 亚洲毛片在线观看.| 国产自产在线视频一区| 亚洲欧洲一级| 狠狠色狠色综合曰曰| 亚洲精品在线一区二区| 国产欧美日韩三区| 亚洲高清视频一区| 国产伦精品一区二区三区| 欧美国产专区| 国产偷自视频区视频一区二区| 久久中文在线| 欧美亚洲不卡| 亚洲高清网站| 国模一区二区三区| 99精品国产一区二区青青牛奶| 国产精品久久中文| 91久久久久久国产精品| 国产一区二区日韩精品| 亚洲一区二区三区高清| 欧美1区视频| 国产精品第2页| 免费成人黄色片| 国产精品亚洲成人| 最新国产精品拍自在线播放| 国产亚洲一区二区在线观看| 亚洲裸体视频| 亚洲精品日韩久久| 久久久99免费视频| 欧美一区二区三区四区在线观看地址| 欧美在线视频不卡| 午夜精品视频在线观看一区二区 | 久久久夜色精品亚洲| 欧美一级二级三级蜜桃| 国产精品成人播放| 在线亚洲一区二区| 亚洲一级网站| 欧美日韩一区不卡|