建立型模式 Prototype 原型模式

2022-07-04 06:33:11 字數 2355 閱讀 3606

原型模式:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

通過給出乙個原型物件來指明所要建立的物件的型別,然後用複製這個原型物件的方法建立出更多同型別的物件。原型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構。

從乙個物件再建立另外乙個可定製的物件,而無需知道任何建立的細節。並能提高建立的效能。 說白了就copy技術,把乙個物件完整的copy出乙份。

一般在初始化的資訊不發生變化的情況下,轉殖是最好的辦法。這既隱藏了物件建立的細節,又對效能是大大的提高。

缺點是每乙個類都必須配備乙個複製方法。

淺複製和深複製的問題:如果欄位是基本資料型別的,則用拷貝建構函式即可進行逐位複製,但如果欄位是指標或引用型別的,則複製就不僅僅要複製指標和引用本身,還需要對其所指的實際資料物件進行複製。

1)prototype:虛擬基類,所有原型的基類,提供clone介面函式

1)prototype::clone函式:純虛函式,根據不同的派生類來例項化建立物件

原型模式實際就是常說的用虛函式模擬實現「虛擬建構函式」,c++的實現機制中並沒有虛擬建構函式這個性質,但是通過不同派生類實現的clone介面函式可以完成與「虛擬建構函式」同樣的效果。

所以,生成乙個新的物件,就是需要建立乙個實際提供服務的物件,就需要乙個已經存在的原型,和通過該原型物件建立實際服務物件的方法。

#ifndef prototype_h

2:

#define prototype_h

3:
4:

// 虛擬基類,所有原型的基類,提供clone介面函式

5:

class prototype

6:
9:

virtual ~prototype(){}

10:
11:

virtual prototype* clone() = 0;

12: };
13:
14:

// 派生自prototype,實現clone方法

15:

class concreateprototype1

16:     : public prototype
17: ;
25:
26:

// 派生自prototype,實現clone方法

27:

class concreateprototype2

28:     : public prototype
29: ;
37:
38:

#endif

#include

"prototype.h"

2:

#include

3:
4: concreateprototype1::concreateprototype1()
5:
8:
9: concreateprototype1::~concreateprototype1()
10:
13:
14: concreateprototype1::concreateprototype1(const concreateprototype1&)
15:
18:
19: prototype* concreateprototype1::clone()
20:
23:
24: concreateprototype2::concreateprototype2()
25:
28:
29: concreateprototype2::~concreateprototype2()
30:
33:
34: concreateprototype2::concreateprototype2(const concreateprototype2&)
35:
38:
39: prototype* concreateprototype2::clone()
40:

建立型模式 原型模式 prototype

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。main.cc include include software computer.h design pattern prototype for example,the company to employees with compute...

建立型模式(四) Prototype(原型模式)

通過給出乙個原型物件來指明所要建立的物件的型別,然後用複製這個原型物件的方法建立出更多同型別的物件。原始模型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用於任何的等級結構。缺點是每乙個類都必須配備 乙個轉殖方法。例子 跟mm用qq聊天,一定要說些深情的話語...

設計模式 建立型模式 Prototype模式

原型模式是用於建立重複的物件,同時又能保證效能 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。如何解決 利用已有的乙個原型物件,快速地生成和原型物件一樣的例項 實際上prototype模式,builder模式,abstractfactory模式都是通過乙個類 物件例項 來專門負責物...