10 原型模式(Prototype)

2021-10-17 11:43:34 字數 1448 閱讀 9382

本文講述了物件建立模式中的原型模式,介紹了原型模式的動機、定義、結構、**例項,最後進行了總結。

再次感謝geekband的李建忠老師、gof等前輩

下述**和工廠方法中使用了相同的例子,即「檔案分割」,在建立物件時,要避免在mainform中直接使用new建立堆物件,即isplitter *splitter = new filesplitter()**中等號後邊屬於實現細節,在抽象模組中依賴實現細節,違背了「依賴倒置」原則,物件建立模組中的設計模式都是為了解決這個問題。

但前邊學習的工廠方法模式和抽象工廠模式只能簡單的建立新物件,一旦想要建立乙個和當前物件具有相同狀態的物件,就顯得力不從心了。

先解決幾個問題:

需求「建立乙個和當前物件具有相同狀態的物件」,可以使用拷貝建構函式(深拷貝),再結合工廠模式,即可得到原型模式,如下:

// client.cpp

class

mainform

:public form

void

button1_click()

};

注意原型模式中的原型不能直接使用,必須用來拷貝。通過虛轉殖方法來實現動態轉殖。

// prototype.cpp

//抽象類

class

isplitter

};

// concreteprototype.cpp

//具體類

class

binarysplitter

:public isplitter};

class

txtsplitter

:public isplitter};

class

picturesplitter

:public isplitter};

class

videosplitter

:public isplitter

};

使用原型例項指定建立物件的種類,然後通過拷貝這些原型來建立新的物件。

工廠模式和原型模式的區別:

綠色表示穩定,紅色表示變化。client相當於mainformprototype相當於isplitterconcreteprototype1/2相當於filesplitterbinarysplitter等,通過clone()來實現動態轉殖。

原型模式(ProtoType)

1.目的 當需要從乙個物件copy出另外乙個物件時,可以使用原型模式,本質上是呼叫的copy建構函式 與copy建構函式的區別,可能就是不需要顯示的生成物件,而是通過函式呼叫 2.prototype.h ifndef prototype h define prototype h include in...

Prototype 原型模式

prototype 原型模式 所謂原型模式,就是可以根據乙個原型,快速建立出其拷貝。如 int a 1 int b new int a a cout a endl cout b endl 輸出結果 2 1 上面就使用了原型模式。根據原型a,快速建立出了a的拷貝b。同時,b儲存了a當時的狀態。當a之後...

原型模式 Prototype

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式是一種建立型設計模式,它允許乙個物件再建立另外乙個可定製的物件,根本無需知道任何如何建立的細節,工作原理是通過將乙個原型物件傳給那個要發動建立的物件,這個要發動的物件通過請求原型物件拷貝它們自己來實施建立。現實很殘酷,都第9章了...