博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Prototype 原型模式
阅读量:7069 次
发布时间:2019-06-28

本文共 1546 字,大约阅读时间需要 5 分钟。

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

原型模式即在运行时动态的通过一个对象的实例来创建这个类的对象,可以理解成通过一个实例克隆出另一个实例。

Prototype模式的一些优点:

  • 对客户隐藏具体的类,使客户直接可使用与特定应用相关的类。
  • 运行时刻增加和删除产品。
  • 改变值以指定新对象。
  • 改变结构以指定新对象。
  • 减少子类的构造。
  • 用类动态配置应用。

在实现时要考虑一些问题:

  • 使用一个原型管理器。当一个系统中原型的数目不固定时,要保持一个可用原型的注册表。客户在注册表中存储和检索原型。客户在克隆一个原型前会在注册表请求该原型。称这个注册表为原型管理器。
  • 实现克隆操作时要注意深拷贝。
  • 初始化克隆对象时的参数要慎重考虑。

 

1 #include 
2 #include
3 4 class Prototype { 5 public: 6 virtual ~Prototype() = 0; 7 virtual Prototype* Clone() = 0; 8 virtual void message() = 0; 9 };10 Prototype::~Prototype(){}11 12 class ConcretePrototype : public Prototype {13 private:14 std::string str;15 public:16 ConcretePrototype() { str = ""; }17 ConcretePrototype(std::string s) { str = s; }18 ConcretePrototype(const ConcretePrototype& r) {19 std::cout << "拷贝构造" << std::endl;20 str = r.str;21 }22 virtual void message() {23 std::cout << str << std::endl;24 }25 virtual ~ConcretePrototype() {}26 virtual Prototype* Clone()27 {28 std::cout << "克隆操作" << std::endl;29 return new ConcretePrototype(*this);30 }31 };

测试代码

1 #include 
2 #include "Prototype.h" 3 4 using namespace std; 5 6 int main() 7 { 8 Prototype* p = new ConcretePrototype("秘密"); 9 p->message();10 Prototype* q = p->Clone();11 q->message();12 system("pause");13 }

测试结果

1 秘密2 克隆操作3 拷贝构造4 秘密5 请按任意键继续. . .

 

posted on
2014-09-02 16:40 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/zinthos/p/3951771.html

你可能感兴趣的文章
Spring之getBean
查看>>
远程访问服务 (RAS) 错误代码列表
查看>>
java.util.concurrent.atomic与CAS详解
查看>>
天猫魔盒 华数盒子双清
查看>>
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 的说明
查看>>
用模板实现 seqlist
查看>>
Mac go delve debug
查看>>
人人都能开发物联网
查看>>
分享一个超棒的免费jQuery幻灯插件:Nivo Slider
查看>>
Linux常用命令以及快捷键
查看>>
nginx和php互动过程;
查看>>
Android 代码混淆(progruard)
查看>>
SylixOS 中断响应时间测试
查看>>
本地存储(localStorage、usedate)
查看>>
linux学习笔记——搭建基于nginx的web服务器、多核配置、nginx配置参数
查看>>
启动时若没有用户代码则发出警告
查看>>
C语言运算符优先级等级口诀
查看>>
Java单例模式
查看>>
mogilefs管理
查看>>
linux运维学习之ansib基础知识详解
查看>>