試題六
閱讀下列說(shuō)明和C++代碼,將應(yīng)填入 (n) 處的字句寫在的對(duì)應(yīng)欄內(nèi)。
[說(shuō)明]
現(xiàn)欲實(shí)現(xiàn)一個(gè)圖像瀏覽系統(tǒng),要求該系統(tǒng)能夠顯示BMP、3PEG和GIF三種格式的文件,并且能夠在Windows和Linux兩種操作系統(tǒng)上運(yùn)行。系統(tǒng)首先將BMP、JPEG和 GIF三種格式的文件解析為像素矩陣,然后將像素矩陣顯示在屏幕上。系統(tǒng)需具有較好的擴(kuò)展性以支持新的文件格式和操作系統(tǒng)。為滿足上述需求并減少所需生成的子類數(shù)目,采用橋接(Bridge)設(shè)計(jì)模式進(jìn)行設(shè)計(jì),所得類圖如下圖所示。
采用該設(shè)計(jì)模式的原因在于:系統(tǒng)解析BMP、GIF與JPEG文件的代碼僅與文件格式相關(guān),而在屏幕上顯示像素矩陣的代碼則僅與操作系統(tǒng)相關(guān)。
[C++代碼]
class Matrix{ // 各種格式的文件最終都被轉(zhuǎn)化為像素矩陣
// 此處代碼省略
};
class Imagelmp{
public:
virtual void doPaint (Matrix m)=0; // 顯示像素矩陣m
};
class WinImp :public ImageImp{
public:
void doPaint (Matrix m) { /*調(diào)用Windows系統(tǒng)的繪制函數(shù)繪制像素矩陣*/)
};
class LinuxImp : public ImageImp{
public:
void doPaint(Matrix m) { /*調(diào)用 Linux系統(tǒng)的繪制函數(shù)繪制像素矩陣*/ }
};
class Image {
public:
void set Imp (Image Imp *imp){ (1) = imp;}
virtual void parse File(string file Name)=0;
protected:
(2) *imp;
};
class BMP : public Image{
public:
void parse File(string file Name) {
// 此處解析BMP文件并獲得一個(gè)像素矩陣對(duì)象m
(3) ;// 顯示像素矩陣m
}
};
class GIF : public Image{
// 此處代碼省略
};
class JPEG : public Image{
// 此處代碼省略
};
void main(){
//在Windows操作系統(tǒng)上查看demo. bmp圖像文件
Image *imagel = (4) ;
ImageImp *imageImpl = (5) ;
(6) ;
imagel->parseFile("demo.bmp");
}
現(xiàn)假設(shè)該系統(tǒng)需要支持10種格式的圖像文件和5種操作系統(tǒng),不考慮類Matrix,若采用橋接設(shè)計(jì)模式則至少需要設(shè)計(jì) (7) 個(gè)類。