91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在C++和Java中如何實現原型模式

發布時間:2021-11-24 14:13:11 來源:億速云 閱讀:154 作者:小新 欄目:軟件技術

這篇文章主要介紹了在C++和Java中如何實現原型模式 ,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

        GOF 給原型模式 的定義為:用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。

        在 C++和Java 中都提供了clone()方法來實現對象的克隆,但是在Java中必須要實現Cloneable這個接口。

        通過給出一個原型對象來指明所要創建的對象的類型,然后用復制這個原型對象的方法創建出更多同類型的對象。原始模型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用于任何的等級結構。缺點是每一個類都必須配備一個克隆方法。

一、組成:

        1) 客戶角色:讓一個原型克隆自己來得到一個新對象。
        2) 抽象原型角色:實現了自己的clone 方法,扮演這種角色的類通常是抽象類,且它具有許多具體的子類。
        3) 具體原型角色:被復制的對象,為抽象原型角色的具體子類。

二、UML類圖:

在C++和Java中如何實現原型模式

三、代碼實現:

JAVA:

Prototype.java:

//原型抽象類
public abstract class Prototype implements Cloneable{   
 String name;   

 public void setName(String name) {   
  this.name = name;   
 }   
 public String getName() {
  return this.name;
 }   

 public Object clone(){   
  Object object = null;   
  try {   
   object = super.clone();   
  } catch (CloneNotSupportedException exception) {   
   System.err.println("AbstractPrototype is not Cloneable");   
  }   
  return object;   
 }   

//原型實現類
class ConcretePrototype1 extends Prototype {

 public ConcretePrototype1() {
  // TODO Auto-generated method stub
  setName("ConcretePrototype1");
 }

}

class ConcretePrototype2 extends Prototype {

 public ConcretePrototype2() {
  // TODO Auto-generated method stub
  setName("ConcretePrototype2");
 }

}

testMain.java:

public class testMain {

 public static void main(String[] args) throws CloneNotSupportedException {
  Prototype pt1 = new ConcretePrototype1();
  Prototype pt2 = (Prototype) pt1.clone();
  Prototype pt3 = new ConcretePrototype2();
  Prototype pt4 = (Prototype) pt3.clone();

  System.out.println("1:"+pt1.getName());
  System.out.println("2:"+pt2.getName());
  System.out.println("3:"+pt3.getName());
  System.out.println("4:"+pt4.getName());

 }
}

輸出結果:

1:ConcretePrototype1
2:ConcretePrototype1
3:ConcretePrototype2
4:ConcretePrototype2

C++:

Prototype.h:

/*
 * Prototype.h
 *
 *  Created on: 2013-6-23
 *      Author: yan chao

 */

#ifndef PROTOTYPE_H_
#define PROTOTYPE_H_

// 虛擬基類,所有原型的基類,提供Clone接口函數
class Prototype
{
public:
 Prototype(){}
 virtual ~Prototype(){}

 virtual Prototype* Clone() = 0;
};

// 派生自Prototype,實現Clone方法
class ConcreatePrototype1 : public Prototype
{
public:
 ConcreatePrototype1();
 ConcreatePrototype1(const ConcreatePrototype1&);
 virtual ~ConcreatePrototype1();

 virtual Prototype* Clone();
};

// 派生自Prototype,實現Clone方法
class ConcreatePrototype2 : public Prototype
{
public:
 ConcreatePrototype2();
 ConcreatePrototype2(const ConcreatePrototype2&);
 virtual ~ConcreatePrototype2();

 virtual Prototype* Clone();
};


#endif /* PROTOTYPE_H_ */

Prototype.cpp:

//============================================================================
// Name        : Prototype.cpp
// Author      : yan chao
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include "Prototype.h"
#include <iostream>

ConcreatePrototype1::ConcreatePrototype1()
{
 std::cout << "construction of ConcreatePrototype1n" << std::endl;
}

ConcreatePrototype1::~ConcreatePrototype1()
{
 std::cout << "destruction of ConcreatePrototype1n"<< std::endl;
}

ConcreatePrototype1::ConcreatePrototype1(const ConcreatePrototype1&)
{
 std::cout << "copy construction of ConcreatePrototype1n"<< std::endl;
}

Prototype* ConcreatePrototype1::Clone()
{
 return new ConcreatePrototype1(*this);
}

ConcreatePrototype2::ConcreatePrototype2()
{
 std::cout << "construction of ConcreatePrototype2n"<< std::endl;
}

ConcreatePrototype2::~ConcreatePrototype2()
{
 std::cout << "destruction of ConcreatePrototype2n"<< std::endl;
}

ConcreatePrototype2::ConcreatePrototype2(const ConcreatePrototype2&)
{
 std::cout << "copy construction of ConcreatePrototype2n"<< std::endl;
}

Prototype* ConcreatePrototype2::Clone()
{
 return new ConcreatePrototype2(*this);
}

testMain.cpp:

/*
 * testMain.cpp
 *
 *  Created on: 2013-6-23
 *      Author: yan chao
 */

#include "Prototype.h"
#include <stdlib.h>

int main()
{
 Prototype* pPrototype1 = new ConcreatePrototype1();
 Prototype* pPrototype2 = pPrototype1->Clone();

 Prototype* pPrototype3 = new ConcreatePrototype2();
 Prototype* pPrototype4 = pPrototype3->Clone();

 delete pPrototype1;
 delete pPrototype2;
 delete pPrototype3;
 delete pPrototype4;

 system("pause");

 return 0;
}

 運行結果:

construction of ConcreatePrototype1n
copy construction of ConcreatePrototype1n
construction of ConcreatePrototype2n
copy construction of ConcreatePrototype2n
destruction of ConcreatePrototype1n
destruction of ConcreatePrototype1n
destruction of ConcreatePrototype2n
destruction of ConcreatePrototype2n

感謝你能夠認真閱讀完這篇文章,希望小編分享的“在C++和Java中如何實現原型模式 ”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

噶尔县| 怀安县| 桓台县| 双辽市| 鹿邑县| 建水县| 怀集县| 美姑县| 高青县| 勃利县| 西宁市| 麻城市| 手游| 吉安县| 介休市| 紫云| 蚌埠市| 楚雄市| 嘉义县| 武宣县| 德令哈市| 讷河市| 潮安县| 蒲江县| 连南| 本溪市| 仪征市| 淮滨县| 河源市| 沈丘县| 土默特右旗| 宁南县| 桑植县| 浦江县| 广平县| 澄城县| 南岸区| 安吉县| 织金县| 额济纳旗| 岗巴县|