您的位置:首页 > 理论基础 > 计算机网络

部署Symantec Antivirus 10.0网络防毒服务器之三

2009-08-01 11:10 453 查看
GOF 给原型模式 的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
在 C++和Java 中都提供了clone()方法来实现对象的克隆,但是在Java中必须要实现Cloneable这个接口。
通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。
一、组成:
1) 客户角色:让一个原型克隆自己来得到一个新对象。
2) 抽象原型角色:实现了自己的clone 方法,扮演这种角色的类通常是抽象类,且它具有许多具体的子类。
3) 具体原型角色:被复制的对象,为抽象原型角色的具体子类。
二、UML类图:


三、代码实现: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

本文出自 “会飞的蜗牛” 博客,请务必保留此出处http://flyingsnail.blog.51cto.com/5341669/1227994
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: